1.超类
java中所有的类都继承与超类Object类
2. super关键字
super关键字可以调用父类的方法,但是super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用父类方法的特殊关键字。
3.子类构造器
当子类继承于父类后,若父类中显示定义了带有参数的构造器,则子类必须在构造器中使用super()方法调用父类的构造器来初始化父类的私有域。并且super调用构造器的语句必须是子类构造器的第一条语句。
class Employee(){
private int id;
Employee(int id){
this.id=id;
}
public int getSelary(){
}
}
class Manager() extends Employee(){
Manager(int id){
super(id);//调用Employee的构造函数
}
public int getSelary(){
}
}
若子类没有显示的调用父类的构造函数,编译器将会默认调用父类不带参的构造函数,若父类有带参的构造函数,子类没有显示的调用任何一个父类带参的构造函数将会报错。
4.多态
4.1 is-a原则:子类的每一个对象都是超类的对象,例如每个经理都是雇员,故Manager类可以设计为Employee类的子类。但是反之不正确,每个雇员不一定是经理
4.2 根据is-a原则表明在程序中任何超类对象出现的地方都可以用子类进行替换,例可以将一个子类对象赋值给超类的变量。
4.3 一个超类变量既可以用超类对象进行赋值,也可以用子类对象进行赋值,此时即为多态的情况。通过多态,编译器将会根据情况对超类变量使用的方法进行判断是调用超类的方法还是调用子类的方法。
Employee employee =new Employee();
employee .getSelary();//调用父类方法
employee=new Manager();
employee . getSelary();//调用子类方法
根据is-a原则,不能将一个超类的引用赋给子类对象,此时将会出现错误的情况。
4.4子类在重构父类的方法时,子类方法不能低于超类方法的可见性,即父类方法为public 子类重构时只能是public,父类为protect时,子类重构时只能是protect或者public。