Fork me on GitHub

Java基础复习--多态

Java基础复习–多态

何为多态

简言之就是父类定义,子类实现。比如动物都有吃这个动作,但不同的动物吃的动作的具体细节是不同的,因此其他具体的动物比如狗或者猫在继承了动物这个父类后,可以对吃方法进行重写,猫吃鱼狗吃肉,让吃这个动作有了不同的表现形式,这就是多态。

实现多态的技术成为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。看完定义可能并不能很好的理解多态到底是什么,通过下面的实例我们将更加深入的理解。

多态的实例

采用多态定义时所有信息都是属于父类信息
一旦子类重写父类方法则调用子类的方法 注意是方法而不是属性,属性还是父类的。
eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
动物类
public class Animal {
public String name = "动物";

public void eat(){
System.out.println("动物进食");
}
}
狗类
public class Dog extends Animal {
public String name = "狗";
@Override
public void eat(){
System.out.println("狗吃骨头");
}
}
测试类
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
}
}

此时a.name是“动物” 而a.eat()输出“狗吃骨头”,这就印证了上面的一句话
采用多态定义时所有信息都是属于父类信息,只有重写的方法才会调用子类的方法。如果子类对属性进行了重新赋值,这个赋值过程是没有用的,实例出的对象的所有信息还是父类Animal的。

多态的意义

下面重点写一下为何要Animal a = new Dog();这样实例化对象
增加程序的灵活性
如果在其他类中有这样的一个方法,想要展示动物吃这个动作
如果写特定的动物的话,方法个数过于多

1
2
3
4
5
6
7
public void showEat(Cat a){
a.eat();
}
public void showEat(Dog a){
a.eat();
}
.....

而如果Animal a = new Dog();这样实例对象的话,方法可以这样写:

1
2
3
public void showEat(Animal a){
a.eat();
}

增强代码复用性,并且更加高效。只需要写这样的一个函数就能传入不同的动物,展示不同种动物的吃的动作。这就是多态的意义。

多态的实现方式

1.重写:
上述的Animal类以及之后的Dog类就是重写的体现,这里不再赘述

2.接口

3.抽象类和抽象方法

关于接口和抽象类的具体内容我会在后续的博客中写出

-------------本文结束感谢您的阅读-------------
0%