多态
定义:在同一时刻体现出事物的不同状态。
多态的前提条件是:他必须有继承关系,
父类的方法也必须是被重写的,
最主要的就是父类引用指向子类(向上转型)。
多态中成员访问特点:
成员变量:编译看等号左边,运行看等号右边。
构造方法:在多态中,父类对象的创建通过new子类名(),优先让子类进行初始化。
非静态的成员方法:由于存你在方法重写,就是编译看等号左边,运行看等号右边。
静态的成员方法:静态成员方法的话可以说不是方法重写,因为静态是跟类有关系的,
编译看等号左边,运行看等号右边。
多态的话有好处也有弊端;
好处就是提高了程序的维护性,也提高了代码的扩展性。
弊端就是多态中是无法访问子类的特有方法的。
如果想要访问子类特有的方法必须向下转型
格式:子类名 对象名 = (子类名)父类引用;
Zi zi = (Zi)fu;
需要注意的是:向下转型使用不当会出现一个异常(class CastException)类型转换异常,运行时期的异常。
方法重写的细节:子类重写父类方法,访问权限不能比父类访问权限低,必须和父的权限修饰符一摸一样。
抽象类(abstract)
定义:描述一件事的时候,没有足够的信息去进行描述,这时就是抽象事物,定义为抽象类。
特点:①抽象类抽象方法都必须被abstract修饰,抽象方法也是定义在抽象类中的。
②:抽象类不可以创建实例对象。
③:子类·只有覆盖了抽象类中的抽象方法之后,子类才可以创建实例,要不然子类还是一个抽象类。
抽象类需要注意:
①:抽象类是一个父类,是子类的共性方法不断抽取而来的。
②:抽象类有构造方法,虽然不能给自己初始化,但是可以给自己的子类初始化。
③:抽象类是可以不定义抽象方法的,抽象类存在的意义就是不让该类创建对象。
抽线类和一般类的异同点:
相同点:
①:他们都是用来描述事物的。
②:他们之中都可以定义属性和行为。
不同点:
①:一般类是可以具体描述的事物的,抽象类描述的事物不具体。
②:抽象类是可以多定义一个成员的,抽象函数。
③:一般类是可以创建对象的,而抽象类创建不了对象。
抽象类关键字abstract不能共存的有:
①final:final修饰玩的类没由子类,而abstract必须有子类,二者冲突了。
②private:抽象方法是需要被覆盖的,而加上private之后是不能被覆盖的,所以不允许出现。
③static:抽象方法一但变成静态被类名调用没意义。
接口(interface)
定义:体现事物的一种扩展功能。
格式:
定义变量:变量必须有固定的修饰符修饰,public static final,因为被final修饰,所以接口中的变量也被称为常量。
定义方法:方法也是有固定的修饰符的,public abstract
特点:
①:接口中的成员都是公共的。
②:接口不可以创建对象。
③:子类必须覆盖掉父类的抽象方法之后,子类才可以实例化,不然子类是一个抽象类。
形式参数
引用类型:
具体类:都需要创建该具体类对象。
抽象类:如果方法的形式参数是抽象类型,那么调用方法的实际参数需要该抽象类的具体对象。
接口:如果方法的形式参数是接口楼类型,那么调用方法的实际参数需要接口的子类实现。
抽象类和接口的区别
(1)成员区别
抽象类:成员变量既可以是常量也可以是变量
抽象类存在抽象类,可以有参数也可以没有参数,抽象类是不可以实例化的,需要子类来实现。
抽象类的成员方法既可以是抽象方法也可以是非抽象方法。
接口:成员变量只能是常量因为被final修饰。
接口不存在构造方法。
成员方法默认修饰符 public abstract
(2)关系区别
类与抽象类之间的关系:是继承关系(extends),只支持单继承,不支持多继承,但是可以多层继承。
类与接口之间的关系:实现关系(implement),一个具体类实现一个接口,一个类继承另一个类的同时,可以实现多个接口
接口与接口之间的关系:接口与接口之间是继承关系,可以单继承也可以多继承
(3)设计理念区别
抽象类:类与类之间的关系,is a 关系,说明子类是父类的一种。
接口:是like a 关系,主要就是扩展功能,后期通过学习就会的。