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 class Cat extends Animal {
    public Cat(String name, int age, String gender) {
        super(name, age, gender);
    }
    
    @Override
    public void eat() {
        System.out.println('The cat ' + super.name + ' is eating fish.');
    }
    
    public void catchMouse() {
        System.out.println('The cat ' + super.name + ' 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('The dog ' + super.name + ' is eating meat.');
    }
    
    public void guardHouse() {
        System.out.println('The dog ' + super.name + ' is guarding the house.');
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Animal('Tom', 2, 'male');
        Cat cat1 = new Cat('Kitty', 1, 'female');
        Dog dog1 = new Dog('Max', 3, 'male');
        
        animal1.eat();
        cat1.eat();
        dog1.eat();
        
        System.out.println();
        
        animal1 = cat1;
        animal1.eat();
        ((Cat) animal1).catchMouse();
        
        System.out.println();
        
        animal1 = dog1;
        animal1.eat();
        ((Dog) animal1).guardHouse();
    }
}

输出结果:

Tom is eating.
The cat Kitty is eating fish.
The dog Max is eating meat.

The cat Kitty is eating fish.
The cat Kitty is catching a mouse.

The dog Max is eating meat.
The dog Max is guarding the house.

可以看到,通过多态的方式调用方法时,实际上调用的是子类重写后的方法。而当调用子类独有的方法时,需要进行类型转换才能调用。

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

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

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