4、可见范围声明
public:任何地方都可访问。
protected:类的子类(后面会讲)及其实例对象可以访问。
private:只有类(实例对象)的内部可以访问。
可以用来修饰方法、属性和类。
1)修饰类:包内的其他文件能否访问。
2)修饰方法:类的外部能否使用该方法。
值得一提的是:如果将所有构造函数声明为private,这个类将无法在外部构建实例对象!只可以通过这个类的静态方法来创建。
3)修饰属性:类的外部能否访问、赋值这个变量。
5、静态与非静态:类、属性、方法、对象
1)对象是实例化的类,就好比水果类和苹果实例,苹果是水果这个类的一个实例。
2)非静态属性是对象的成员变量,每一个对象都有单独的一份。
静态属性是属于类的成员变量,不归属于任何对象,无论类有多少实例对象,这个属性都只有唯一的一份。可以使用类名.属性名进行访问。
3)非静态方法是对象的成员函数,函数体内部可以使用this来访问对象的成员。
静态方法是属于类的成员函数,不归属于任何对象,因此也无法直接访问非静态的成员变量,因为他们完全没有关联。
6、抽象类
含有抽象方法的类是抽象类,抽象类无法创建对象。
抽象类(方法)使用abstract关键词修饰。
使用抽象类的方法是用一个子类去继承它,并实现它的抽象方法。
7、类的继承(extends)与方法的重写(Override)
类可以继承一个另一个类,如没有指定,则默认继承Object类,它是所有类的祖先。
A类继承B类可以用以下语句表示:class A extends B {成员}
类不支持多继承:即不可以有多个父类。
继承后,子类将获得父类的所有成员(属性和方法):
在子类内部可以使用super.成员名调用(仅限public/protected),其中构造函数为super(构造参数),而在外部,可以直接访问public的成员。
重写:子类的父类的方法可以重名,这时子类的方法将覆盖父类的方法(抽象方法),这将导致父类方法在外部无法直接调用(抽象方法本身无法调用),外部将调用子类重写的方法。不过也可以在子类的方法中使用super调用。
通常在子类重写的方法前使用@Override来声明重写。
阻止重写:在父类中的方法前增加final关键词可以阻止子类重写(称为严格继承)。
在外部,父类的变量是可以被赋予子类的值的,不过不要想当然只能运行父类方法,只有运行时才能决定使用哪个方法:子类型可以赋值给父类型的变量,但是通过该变量无法使用子类型的多余成员,只能使用子类型的重写方法或继承的内容(父类的原始方法)。
实际上,可以使用抽象方法(抽象类)来要求子类型实现方法并使用子类型的方法(如果有)。