Java面向对象(二)

来源:互联网 发布:怎么接淘宝家具安装 编辑:程序博客网 时间:2024/04/29 21:43

封装

封装就是先装再封的过程!

假如没有封装,可能是:

public class Person {    public String name;    public int age;}
Person p = new Person();p.age = 9527; // 合法,却不合理

为了避免合法,却不合理的使用类的属性,可以将类的属性使用更加严格的访问权限,避免外部恶意的访问:

public class Person {  // ...  private int age;}

为了使得类的外部,依然可以使用这个属性,则可以提供更加宽松的权限的方法:

public class Person {    // ...    private int age;    public void setAge(int personAge) {        age = personAge;    }}
Person p = new Person();p.setAge(9527);

由于定义方法,在方法的内部,可以根据项目的业务,对属性的值进行控制:

public class Person {    // ...    private int age;    public void setAge(int personAge) {        if (personAge >= 18 && personAge <= 70) {            age = personAge;        }    }}
Person p = new Person();p.setAge(9527); // 设置age属性的值失败!

为了保证在类的外部,还可以获取到该属性的值,还需要另外创建一个方法,用于获取该属性值:

public class Person {    // ...    private int age;    // ... setAge() ...    public int getAge() {        return age;    }}
Person p = new Person();System.out.println(p.getAge());

所以,封装最直接的目的是:

  • 使用1种数据类型表示多种数据;
  • 使得访问数据变得更加安全,避免出现合法却不合理的数据;
    更多……

小结

所以描述类的特征的,特别是用于“装”多个属性的类,应该把所有的属性都声明成私有的,并且提供公有的set???()方法和get???()方法!

访问权限

类的内部 同包 子类 其它类 public T T T protected T T T (默认) T T – private T – –

继承

继承的本质是扩展,是一种利用已有的类,快速创建新的类的机制

假如没有继承:

public class Cat {    public void run() {    }    public void eat() {    }    public void sleep() {    }    public void catchMouse() {    }}
public class Dog {    public void run() {    }    public void eat() {    }    public void sleep() {    }}

在没有继承的情况下,可能多种类都需要定义相同的属性,或相同的方法,创建类的过程就相对非常繁琐,当有了继承之后:

public class Animal {    public void run() {    }    public void eat() {    }    public void sleep() {    }}
public class Cat extends Animal {    public void catchMouse() {    }}

在继承关系中,被继承的类通常称之为父类,也可以称之为基类,或超类,英语为Super Class,得到继承关系的类通常称之为子类,也可以称之为派生类,英语为Sub Class

在Java中,如果某个类没有显式的继承自其它类,则默认继承自java.lang.Object类;

Java语言是一门单继承的语言,所有的类都只可以有1个直接父类;

当实现了继承关系后,子类将获得父类中所有属性和方法,除了构造方法和static成员!

从Java官方(Oracle)的文档中,仅有具有访问权限的成员,才会被子类继承!

从创建对象的角度上来说,当创建子类的对象时,一定会先创建父类的对象,包括父类中声明为私有的成员!所以,基于父类扩展出来的子类的对象中,是包括父类的所有成员的!

重写

重写(Override / Overwrite)指的是在子类中,重新编写父类中已经声明的方法;

当父类中的方法不足以描述子类的行为特征时,则可以在子类中进行重写;

某个对象执行方法时,到底是执行父类的方法,还是子类的方法,完全取决于这是哪个类的对象,即:如果创建的对象是子类的,则执行子类的方法!如果子类中没有重写,则子类会继承得到父类的方法,可以理解为执行了父类的方法!

重写的原则是:与父类的方法保持相同的名称、参数列表、返回值类型,且不得使用比父类的方法更严格的访问权限!

0 0
原创粉丝点击