我的独立博客 Marsguest’s Blog
Java基础复习–多态
何为多态
简言之就是父类定义,子类实现。比如动物都有吃这个动作,但不同的动物吃的动作的具体细节是不同的,因此其他具体的动物比如狗或者猫在继承了动物这个父类后,可以对吃方法进行重写,猫吃鱼狗吃肉,让吃这个动作有了不同的表现形式,这就是多态。
实现多态的技术成为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。看完定义可能并不能很好的理解多态到底是什么,通过下面的实例我们将更加深入的理解。
多态的实例
采用多态定义时所有信息都是属于父类信息!
一旦子类重写父类方法则调用子类的方法 注意是方法而不是属性,属性还是父类的。
eg:
动物类
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();
这样实例化对象
增加程序的灵活性
如果在其他类中有这样的一个方法,想要展示动物吃这个动作
如果写特定的动物的话,方法个数过于多
public void showEat(Cat a){
a.eat();
}
public void showEat(Dog a){
a.eat();
}
.....
而如果Animal a = new Dog();
这样实例对象的话,方法可以这样写:
public void showEat(Animal a){
a.eat();
}
增强代码复用性,并且更加高效。只需要写这样的一个函数就能传入不同的动物,展示不同种动物的吃的动作。这就是多态的意义。
多态的实现方式
1.重写:
上述的Animal类以及之后的Dog类就是重写的体现,这里不再赘述
2.接口
3.抽象类和抽象方法
关于接口和抽象类的具体内容我会在后续的博客中写出