继承与多态的简单代码实现
首先继承由父类和子类组成,我们就以一个动物园管理员喂动物的事例来实现
动物父类
首先需要一个动物的父类来写一个动物吃的方法
public class Animal {
public void eat(){
System.out.println("动物吃食物!");
}
}
然后动物园里会有各种各样的动物
动物子类
比如有老虎,老虎需要吃肉,我们需要重写Animal的eat方法,这时我们需要使用@override
public class Tiger extends Animal{
@Override
public void eat(){
System.out.println("老虎吃肉!");
}
}
然后再来一个鬣狗(狗),同理Tiger类
public class Dog extends Animal{
@Override
public void eat(){
System.out.println("小狗吃骨头!");
}
}
动物管理员
我们需要一个动物管理员来实现一个“喂”的动作,这里调用Animal的eat方法(在运行过程中不会运行Animal的eat,因为在子类中eat被重写了)
public class Zookeeper {
public void feed(Animal animal){
animal.eat();
}
}
动物园系统
这时就可以实现在动物园里“喂”动物的操作啦!
public class Zoo {
public static void main(String []arge){
Zookeeper zk=new Zookeeper();
Animal animal1 = new Tiger();
zk.feed(animal1);
Animal animal2 = new Dog();
zk.feed(animal2);
}
}
运行结果:
老虎吃肉!
小狗吃骨头!
这时有人要问了,为什么父类Animal的eat方法没有被调用?
这因为在运行feed()方法时animal.eat()中的eat方法最终调用的是子类重新的版本,这就是多态的效果。
多态的效果
- 对于指向子类的对象的父类来说,在编译期间只调用父类方法,不能直接调用子类的方法。
- 对于父子类都有的非静态方法来说,指向子类的父类对象最终调用子类的重写版本
- 对于父子类都有的静态方法来说,指向子类的父类对象最终调用父类中的版本,与指向对象无关。
- 多态可以屏蔽不同子类的差异性而编写通用代码,从而产生不同的效果
文章通过创建一个动物类Animal作为父类,然后建立老虎和狗的子类,重写eat方法,展示了Java中的继承和多态特性。动物园管理员Zookeeper喂食时,调用父类方法,但实际执行的是子类的重写版本,体现了多态的动态绑定特性。
755

被折叠的 条评论
为什么被折叠?



