多态
多态
1、 什么是多态?
同一方法,多种形态。
2、 多态分类
1> 静态方法
也被称为编译时多态,即在编译时决定调用哪个方法。(一般在继承关系的子类对象调用同名不同参的方法中出现或同一类中的方法重载)
静态方法一般指方法重载
只要构成了方法重载,就可以认为形成了静态多态的条件
静态多态与是否发生继承没有必然联系。
2> 动态多态
也称为运行时多态,即在运行时才能确定调用哪个方法
形成动态多态必须具体以下条件:
必须要有继承的情况存在;
在继承中必须要有方法覆盖;
必须由基类的引用指向派生类的实例,并且通过基类的引用调用被覆盖的方法
简化:
必须要有方法覆盖
必要有引用转型
3、 抽象方法
a) 什么是抽象方法?
在某些情况下,基类无法(或者没有必要)提供被覆盖方法的具体实现,那么就可以将此方法声明成抽象方法
b) 一般语法
[访问权限] abstract 返回值类型 方法名称(参数列表);
4、 抽象类
a) 什么是抽象类?
如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。
b) 一般语法
[访问权限] abstract class 类名
{
成员列表
}
C)特性
v 抽象类不可以直接实例化,只可以用来继承;
v 抽象类的派生子类应该提供对其所有抽象方法的具体实现;
v 可以这么认为,抽象方法实际上就是由抽象基类强制要求其派生子类必须实现的方法原型;
v 如果抽象类的派生子类没有实现其中的所有抽象方法,那么该派生子类仍然是抽象类,只能用于继承,而不能实例化;
v 抽象类中也可以包含有非抽象的方法;
构造方法和静态方法不可以修饰为abstract。
5、 接口
a) 什么是接口?
如果某个类中的所有方法都是抽象方法,那么可以考虑将该类定义为接口。
b) 一般语法
[访问权限] interface 接口名 {
成员列表
}
c) 实现接口
与抽象类相似,接口同样不可以实例化,只能用于实现;
d) 一般语法
[访问权限] class 类名 implements 接口名 {
成员列表
}
e) 特性
接口中不能定义非抽象方法,也就是说接口中不能包含有函数实体;
接口中的所有方法都默认为抽象方法,无需在每个方法前加abstract关键字;
接口的实现类应该提供对接口中所有抽象方法的具体实现,否则将成为抽象类;
与抽象类和它的继承类相似,也可以使用接口的引用指向其实现类的对象,从而达到动态多态的效果。