2017-08-04
多态
某一个事物,在不同时刻表现出来的不同状态
多态的前提:有继承关系,有方法重写,有父类引用指向子类对象
多态的体现:继承方面,接口方面,抽象类方面
多态的好处:提高了程序的维护性(由继承保证)
提高了程序的扩展性(由多态保证)
成员访问的特点:成员方法的访问:编译看左边,运行看右边
成员变量的访问:编译看左边,运行看左边
静态方法的访问:编译看左边,运行看左边
多态的弊端:不能访问子类的特有功能
多态的转型:向上转型:从子到父 父类引用指向子类对象
向下转型:从父到子 父类引用转化为子类对象
向上转型时:当调用成员方法时会调用出子类的方法,如果子类没有被调用的方法,则再去从父类找
当调用成员变量时会调出父类的变量
当调用静态方法时 ,可以用父类或子类的类名去调用静态方法,也可以用创建出来的对象调用静态方法,是调用父类的
子类特有的类是调不出来的
向下转型时:可以调用父类特有的方法
当调成员方法时,如果子类中没有这个方法则会调父类的,如果有的话,则调用子类的,
调用成员变量,调用静态方法也是一样的
抽象类
抽象类和抽象方法必须用abstract关键字来修饰
格式:abstract class 类名 {}
public abstract void 方法名();
抽象类不一定要有抽象方法,但抽象方法一定要写在抽象类中
抽象类不能实例化,但能按照多态的方式,由具体的子类实例化,这是多态的一种,抽象多态
抽象类的子类:要么是抽象类,要么重写抽象类中的所有抽象方法 ,如果抽象类也有它的抽象父类,抽象父类中的方法也会被实现
abstract 关键字与private , final ,static 关键字冲突
接口
用关键字 intreface 声明 : interface 接口名{}
类实现接口用implement:class 类名 implement 接口名{}
接口不能实例化,但能按照多态的方式,由具体的子类实例化,这是多态的一种,接口多态
单继承【类与类】;多继承【接口与接口,逗号隔开】;多实现【类和接口,逗号隔开】
接口的子类:要么是抽象类,要么重写接口中的所有抽象方法 ,如果接口也有它的接口父类,接口父类中的方法也会被实现
接口中的所有方法都是抽象方法,可以不加abstract关键字,默认的就是抽象的;成员变量都是静态常量,可以不加static final关键字,默认的就是静态常量
接口中的权限修饰符只能是public
如果接口1继承了接口2(接口和接口之间只能继承),则接口1的子类也要实现接口2中未实现的方法
如果类已经实现了接口2,接口1,则接口1不能再去继承接口1。