今天开始终于讲面向对象的最后一个特性多态了。多态指的是某一事物在不同时刻表现出的不同状态。它的前提是要有继承关系以及方法重写,并且父类引用指向子类对象。
首先多态中的成员变量访问时编译看左边,运行看左边。在创建子类对象时会访问父类的构造方法。成员方法则是编译看左边,运行看右边。
同时,多态也使得我们不能使用子类特有的功能,所以需要将父类引用强制转换为子类。
然后就是抽象类,所谓抽象类,就是一个概念类的东西。就好像我们常说的那个哈姆莱特一样,当我们没有一个具体的参照物时就无法去定义它,所以有了抽象类的产生。而在Java中我们将没有方法体的方法定义为抽象方法。在抽象类中不一定有抽象方法,而有抽象方法的类一定是抽象类。抽象类的子类,要么是抽象类,要么重写抽象类中所有的方法。
另外,一个类如果定义为抽象类,则它不能创建对象。
最后是接口,接口就是在原有功能上进行扩展。在接口中,成员变量为常量,成员方法是抽象方法,没有构造方法。
最后就是类接口之间的相互关系。
类与类:继承关系,只能单继承,可以多层继承。
类与接口:实现关系,可以单实现,也可以多实现,同时还可以在继承一个类的同时实现多个接口。
要注意的是,在JDK1.8之后提供了用default修饰的方法,可以给出功能的具体实现,子类可以继承下去。