继承
继承:
·在多个类之间存在相同的属性和方法时,可从这些类抽象出一个通用类,该通用类可以定义一系列的一般特性,再被其他更具体的类继承,每个具体的类都可以增加一些自己特有的属性和方法。
继承性可以使子类拥有父类的成员变量和成员方法。
·重要原则:
(1)Java只支持单重继承,不支持多重继承。
(2)子类只继承父类中的非private成员变量。
(3)子类的成员变量和父类的成员变量同名时,父类的成员变量被覆盖,而不是被继承。
(4)子类只继承父类中的非private成员方法。
(5)子类的成员方法和父类的成员方法同名时,父类的成员方法被子类的成员方法覆盖,而不是被继承。
·
super关键字:
·super关键字表示对某个类的父类的引用。
·两种通用形式:
(1)用来访问被子类的成员隐藏的父类成员;
(2)可以调用父类的构造函数。
·通过继承关系实现对成员的访问是按照最近匹配原则进行的:
(1)在子类中访问成员变量和方法时将优先查找是否在本类中已经定义,如果该成员在本类存在,则使用本类的,否则,按照继承层次的顺序往父类查找,如果未找到,继续逐层向上到其祖先类查找。
(2)使用this访问成员则首先在本类中查找,如果没有,继续逐层向上到其祖先类查找。
(3)super特指访问父类的成员,使用super首先到直接父类查找匹配成员,如果未找到,在逐层向上到祖先类查找。
·
构造方法的继承性:
·子类可以通过super关键字调用父类中定义的构造方法。格式:
super(调用参数列表)
这里的调用参数列表必须和父类的某个构造方法的参数列表完全匹配,即调用参数列表的参数个数和参数类型都要和父类的某个构造方法里用到的参数一一对应。
·子类与其直接父类之间的构造方法的继承性原则:
(1)按继承关系,构造方法是从顶向下进行调用的。
(2)如果子类没有构造方法,则它默认调用父类无参数的构造方法;如果父类中没有无参数的构造方法,则将产生错误。
(3)如果子类有构造方法,那么在创建子类的对象时,则将先执行父类的构造方法,然后再执行子类的构造方法。
(4)如果子类有构造方法,但子类的构造方法中没有使用super关键字,则系统默认执行该构造方法时会产生super()代码,即该构造方法会调用父类无参数的构造方法。
(5)对于父类中包含有参数的构造方法,子类可以通过在自己的构造方法中使用super关键字来引用,而且必须是子类构造方法中的第一条语句。
(6)在构造函数中,super()和this()只能有一个定义在第一行。super()与this()都是调用构造函数,构造函数用于初始化,所以定义在第一行。
·
多态
多态:
·多态性是指同名的若干方法,具有不同的实现(即方法体中的代码不一样)。多态性能增强程序的动态特性,使其具备良好的扩展性。
·多态的两种表现形式:方法重载与方法重写。详见Java 重载(Overload)与重写(Override)
·多态存在的三个必要条件:继承、重写、父类引用指向子类对象
·
父类类型引用指向子类对象:
·Father f=new Son();
·f调用父类中定义的所有属性;
对于子类中定义的而父类中没有的方法,f是不可以调用的;
父类中的方法只有在父类中定义而在子类没有重写的情况下,f调用此方法指向的是父类的方法;
父类中的方法,如果子类重写了该方法,f调用此方法指向的是子类的方法。
·