0%

Java/Java_多态

Java_多态

多态是同一个行为具有不同表现形式或形态的能力
多态就是同一个接口,使用不同的实例而执行不同的操作。

多态性的优点

  • 消除类型之间的耦合关系
  • 可替换性
  • 可扩充性
  • 借口性
  • 灵活性
  • 简化性

    多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

当使用多态方式调用方法时,首先检测父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class DuoTai {
public static void main(String[] args) {
show(new Cat()); // 以Cat对象调用show方法
show(new Dog()); // 以Dog对象调用show方法

Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是Cat的eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是Cat的work
}

public static void show(Animal a){
a.eat();
if (a instanceof Cat){ // 猫做的事情
Cat c = (Cat)a;
c.work();
}
else if (a instanceof Dog){ // 狗做的事情
Dog c = (Dog) a;
c.work();
}

}
}

abstract class Animal{
abstract void eat();
}
class Cat extends Animal{
@Override
public void eat(){
System.out.println("吃鱼");
}
public void work(){
System.out.println("抓老鼠");
}
}
class Dog extends Animal{
@Override
public void eat(){
System.out.println("吃骨头");
}
public void work(){
System.out.println("看家");
}
}

虚函数

虚函数的存在是为了多态
Java中其实并没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字编程非虚函数

重写

也就是子类能够重写父类的方法。
当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
要想调用父类中被重写的方法,则必须使用关键字super。