(1)类变量
使用关键字static声明类变量,而且每个类变量的实例都会被所有类对象共享。
实例变量
类的每个对象都有自己的实例变量——它们在类中声明,但是没有使用关键字static。
(2)静态方法
对于设定为static的方法,即使不存在类对象也可以调用,但是static方法不能引用实例变量。
非静态方法
没有使用static进行设定的方法可以直接访问类中的所有变量。
(3)抽象方法
没有定义方法体的方法,而且使用abstract关键字进行定义。
抽象类
包含一个或多个抽象方法的类,必须使用abstract属性进行定义。
(4)在Java中,无论是explicit还是implicit方式,都要求在子类的构造方法中调用其父类的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构造方法中会自动进行调用;如果父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句中进行调用。究其原因,想必是Java语言设计者,要求子类有责任保证它所继承的父类尽快进入到一个稳定、完整的状态中。试想,如果没有这个约束,那么子类的某个继承自父类的方法可能会使用到父类中的一些变量,而这些变量并没有进行初始化,从而产生一些难以预料的后果,因此构造子类的对象前,必须构造父类的对象,并将之隐含于子类对象之中,使用关键字super引用父类对象。也因此,当一个类的构造方法是 private 时,它是不可被 extends 的,因为子类构造方法难以调用到这个父类的构造方法。
public class A {
A(int a) {
}
}
public class B extends A {
B(int a) {
super(a);
}
}
总之,实现派生类构造函数时,在子类的构造函数中,方法体的第一条语句应该是调用超类的一个构造函数。如果不是,编译器会插入对超类默认函数的调用。
构造子类的对象前,系统会自动构造父类的对象,并将之隐含于子类对象之中,可以使用关键字super引用父类对象。
子类不能继承超类构造函数。
(5)一个类中从构造函数调用构造函数使用this(...);方法。
子类可通过super(...)来调用父类的构造方法,从而设置从父类继承而来的成员变量。
(6)@Override
应该对能多态调用的派生类方法使用@Override标记,这样可以保护由派生类中不正确的方法签名而引起的错误。
(7)实现部分接口
如果一个类没有实现自身需要实现的接口所定义的所有方法,那么这个类就必须被声明为abstract类型。
(8)接口类型与多态
如果多个类实现一个通用接口,那么声明为接口成员的方法将能够通过使用接口类型的变量存储指向类型对象的引用而多态的执行。
(9)