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 异常。

总结:

多态性是面向对象编程的重要特性之一,它可以让代码更加灵活和可扩展。通过多态,我们可以用统一的方式处理不同类型的对象,而无需关心对象的具体类型。这使得代码更加易于维护和扩展。

Java 多态性示例:动物、猫和狗

原文地址: https://www.cveoy.top/t/topic/okw2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录