- 继承(inherit)
在java中,除了Object类(topmost class),所有class有且仅有1个直接父类(单继承),但一个父类可以直接派生出多个子类。继承的一般形式:
- class MountainBike extends Bicycle {
- // new fields and methods defining a mountain bike would go here
- }
注1:子类不继承父类的 constructor,但可以在其中调用父类的constructor。
注2:子类不继承父类中的private成员,子类可以通过继承父类中的public或protected方法来访问它们。
注3:在子类中不能覆盖父类的Static methods,只能覆盖Instance methods,隐藏Static methods。
注4:子类中的覆盖方法必须设定的访问限制更宽松(至少一样), 例如,一个protected instance method在子类中覆盖时可设定为public,而不能是private。
注5:被覆盖的方法不能是private, 否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
注6:Overload:(多态)重载,它是指可以定义一些名称相同但参数形式(参数类型、个数或顺序)不同的方法,运行时VM会根据不同的参数形式选择匹配的方法执行。
注7:子类中与父类名字相同(即使类型不同)的成员变量隐藏了父类中相应的成员变量(不是覆盖),从代码的可读性考虑,并不建议在子类中使用与父类相同名字的成员变量。
注8:在子类中使用super关键字访问父类的成员变量。
注9:如果在子类中重写父类的某个方法,可以在overriden方法中调用父类的方法。
例如:
有一个父类
public class Superclass {
public void printMethod() {
System.out.println("Printed in Superclass.");
}
}
它的一个子类:
public class Subclass extends Superclass {
public void printMethod() { //overrides printMethod in Superclass
super.printMethod();
System.out.println("Printed in Subclass.");
}
public static void main(String[] args) {
Subclass s = new Subclass();
s.printMethod();
}
}
输出结果:
Printed in Superclass.
Printed in Subclass.
注10:在子类构造器中使用super( )调用父类构造器
super( );
或
super( Parameter List);
此番调用必须位于子类构造器中的第一行。
例如:
public class MountainBike extends Bicycle {
int startHeight;
public MountainBike (int startHeight, int startCadence, int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
this.startHeight = startHeight;
}
}
注11:final 方法不可被重写,一般是一些已经被充分实现且不需改变的方法。constructor中的方法一般限定为final方法,否则子类便可以重新定义这些方法,导致一些难以预料的结果。
注12:final亦可修饰整个class,表示该类不可被继承,不可被改变。例如String类。