Java 多态性示例:动物、猫和狗
Java 多态性示例:动物、猫和狗
本示例通过定义动物、猫和狗三个类,演示了多态性的概念。
动物类定义:
public class Animal {
private String name;
private int age;
private String gender;
public Animal(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public void eat() {
System.out.println(name + ' is eating.');
}
public String getName() {
return name;
}
}
猫类定义:
public class Cat extends Animal {
public Cat(String name, int age, String gender) {
super(name, age, gender);
}
@Override
public void eat() {
System.out.println(getName() + ' is eating fish.');
}
public void catchMouse() {
System.out.println(getName() + ' is catching a mouse.');
}
}
狗类定义:
public class Dog extends Animal {
public Dog(String name, int age, String gender) {
super(name, age, gender);
}
@Override
public void eat() {
System.out.println(getName() + ' is eating bones.');
}
public void watchHouse() {
System.out.println(getName() + ' is watching the house.');
}
}
测试代码:
public class Test {
public static void main(String[] args) {
Animal animal1 = new Cat("Tom", 2, "Male");
Animal animal2 = new Dog("Snoopy", 3, "Female");
animal1.eat();
((Cat) animal1).catchMouse();
animal2.eat();
((Dog) animal2).watchHouse();
}
}
输出结果:
Tom is eating fish.
Tom is catching a mouse.
Snoopy is eating bones.
Snoopy is watching the house.
特点:
- 通过多态调用方法时,编译时会按照父类的类型进行编译,运行时会根据实际对象的类型进行调用。
- 因此,通过
Animal类型的引用调用eat()方法时,会根据实际对象的类型调用相应子类的重写方法,而不是Animal类的原始方法。 - 而通过强制类型转换后调用子类特有的方法时,如果实际对象的类型不是该子类,会抛出
ClassCastException异常。
总结:
多态性是面向对象编程的重要特性之一,它可以让代码更加灵活和可扩展。通过多态,我们可以用统一的方式处理不同类型的对象,而无需关心对象的具体类型。这使得代码更加易于维护和扩展。
原文地址: https://www.cveoy.top/t/topic/okw2 著作权归作者所有。请勿转载和采集!