概念:多态是同一个行为具有多个不同表现形式或形态的能力。
应用举例:
1、首先,有一个名为 Animal 的抽象类,如下
public abstract class Animal {
public abstract void eat() {};
public abstract void live() {};
}
2、分别定义两个类 Tiger 和 Lion 继承 Animal
public Tiger extends Animal {
@override
public void eat() {
System.out.print("tiger is eating\n");
}
@override
public void live() {
System.out.print("tiger is living\n");
}
}
public Lion extends Animal {
@override
public void eat() {
System.out.print("lion is eating\n");
}
@override
public void live() {
System.out.print("lion is living\n");
}
}
3、我们来测试一下
public Test {
Animal animal = new Tiger();
animal.eat();
animal.live();
Animal animal = new Lion();
animal.eat();
animal.live();
}
结果是:
tiger is eating
tiger is living
lion is eating
lion is living
这样的话,Animal,Tiger 和 Lion 之间就存在继承机制下的多态性,它们三者之间的关系见下图:
而将例子中的 Animal 抽象类换成一个接口,那么就存在接口实现多态性,它们两者之间的内部实现原理其实是相似的,了解了一个,另外一个就照推。
实现原理
以 animal = new Tiger()
animal.eat()
为例
(1)确定类的方法名表
(2)animal.eat()
寻找对应方法
(3)重载选择
eat(方法参数)
根据参数进行再选择
(4)确定方法性质
如果是以下类型:
- private
- static
- 构造
- final
则是静态绑定,是在编译时就绑定好了的,不需要再进行选择,否则就是动态绑定,是执行的时候进行绑定,是实时动态的。
(5)最终确定了Tiger里面的eat() 方法