什么是多态?
定义:同一个对象,在不同时刻表现出来的不同形态。
多态的前提:
- 要有继承或实现关系
- 要有方法的重写
- 要有父类引用指向子类对象
多态中的成员访问特点
在多态的实际应用中,
- 当调用成员变量时编译看父类,运行看父类(就是在idea工具书写的时候是否报错取决于父类是否有该变量,在程序运行时该变量值取决于父类)
- 当调用成员方法时编译看父类,运行看子类(就是在idea工具书写的时候是否报错取决于父类是否有该方法,在程序运行时该方法内容取决于子类)
- 注意:成员变量、成员方法不同的原因是成员变量不可以被重写。
多态的利与弊
利:多态的使用提高了程序的可扩展性,(使用父类型作为传递的参数,在使用的时候,使用具体的子类型参与操作)
弊:不能使用子类特有成员(解决方法:利用多态的转型:向下转型)
抽象类
- 在为子类做共性功能抽取时,有一些方法在父类中并没有具体的体现,这时候需要定义为抽象类(抽象类中可以包含方法体)
- 特点1:abstract关键字修饰类与抽象方法、抽象类的子类要么是抽象类要么重写所有父类的抽象方法
- 特点2:可以有变量、常量,有构造方法(抽象类的构造方法用于其子类引用,自己不能创建对象)
接口
-
Java中的接口更多的体现在对行为的抽象
-
接口不能被实例化,所以采用多态形式调用:具体类多态、抽象类多态、接口多态
-
接口的子类:要么重写接口中的所有抽象方法、要么子类也是抽象类
-
特点1:接口中的成员变量默认修饰符为public static final (常量)
-
特点2:没有构造方法,接口主要是扩展功能的,没有具体的存在
-
特点3:成员方法默认修饰符public abstract
类和接口的关系
- 类与类之间仅可以单继承,但是可以多重继承
- 类与接口之间可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口与接口之间的关系,可以单继承,也可以多继承
抽象类和接口的区别
-
成员区别:
抽象类:
变量,常量;有构造方法;可以有抽象方法,也可以有非抽象方法
接口:
常量;抽象方法 -
关系区别:
类与类:
继承,单继承
类与接口:
实现,可以单实现,也可以多实现
接口与接口:
继承,单继承,多继承 -
设计理念区别
抽象类:
对类抽象,包括属性、行为
接口:
对行为抽象,主要是行为