java 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。
现实中,比如我们按下 F1 键这个动作:
- 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
- 如果当前在 Word 下弹出的就是 Word 帮助;
- 在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
多态的优点
- 消除类型之间的耦合关系
- 可替换性
- 可扩充性
- 接口性
- 灵活性
- 简化性
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
多态的实现方式
方式一:重写:
- 这个内容已经在上一章节详细讲过,就不再阐述,详细可访问:Java 重写(Override)与重载(Overload)。
方式二:接口
-
生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
-
java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。
方式三:抽象类和抽象方法
/**
* obj-2
* 多态
*/
abstract class Fruits {
abstract void colour();
}
/**
* obj-2
*/
public class Apple extends Fruits {
public void colour(){
System.out.println("红色");
}
public void price(){
System.out.println("1.5");
}
}
/**
* obj-2
*/
public class Banana extends Fruits {
public void colour(){
System.out.println("黄色");
}
public void price(){
System.out.println("2.0");
}
}
public class Obj_2 {
public static void main(String[] args) {
show(new Apple());
show(new Banana());
Fruits f = new Apple();// 向上转型
f.colour();// 调用的是 Apple 的 colour
Apple a = (Apple)f;// 向下转型
a.price();// 调用的是 Apple 的 price
}
public static void show(Fruits f){
f.colour();
if(f instanceof Apple){
Apple a = (Apple)f;
a.price();
}else if(f instanceof Banana){
Banana b = (Banana)f;
b.price();
}
}
}
虚函数
虚函数的存在是为了多态。
Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。
重写
我们将介绍在 Java 中,当设计类时,被重写的方法的行为怎样影响多态性。
我们已经讨论了方法的重写,也就是子类能够重写父类的方法。
当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
要想调用父类中被重写的方法,则必须使用关键字 super。
网友评论