江明涛的博客
Java继承的多态性
Java继承的多态性

Java继承的多态性

Java继承是一种面向对象编程语言中常见的特性,它有助于提高代码的复用性和灵活性。其中一个重要的概念就是多态性。多态性允许不同类型的对象对同一个方法做出不同的响应。

在Java中,多态性是通过继承和方法重写实现的。当一个子类继承了一个父类,并且重写了父类的方法时,我们就可以通过父类的引用来引用子类的对象,从而实现多态性。

假设我们有一个抽象类Animal和它的两个子类Cat和Dog。Animal类有一个抽象方法makeSound(),而Cat和Dog类分别实现了这个方法。创建Cat和Dog对象后,我们可以将它们都赋给Animal类型的引用变量。然后,我们通过调用makeSound()方法来测试多态性。

public abstract class Animal {
    public abstract void makeSound();
}
public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("喵喵喵");
    }
}
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}
public class Main {
    public static void main(String[] args) {
        Animal cat = new Cat();
        Animal dog = new Dog();
        
        cat.makeSound(); // 输出:"喵喵喵"
        dog.makeSound(); // 输出:"汪汪汪"
    }
}

在上面的例子中,我们首先创建了一个Animal类型的cat变量,并将其指向一个Cat对象,然后调用makeSound()方法。由于cat变量的静态类型是Animal,但它的动态类型是Cat,因此调用的是Cat类中的makeSound()方法。同样,对于dog变量,我们也可以使用相同的方法。

这种多态性的好处在于,我们可以编写适用于多个子类的通用代码。假设我们有一个接收Animal类型参数的方法:

public void printSound(Animal animal) {
    animal.makeSound();
}

然后,我们可以将cat和dog对象分别传递给该方法,并调用makeSound()方法,即使传入的是不同的子类对象,该方法仍然可以正常工作。

总而言之,Java继承的多态性使得我们可以更灵活和通用地编写代码。通过将子类对象赋给父类引用变量,我们可以在不同的对象上调用相同的方法,以提高代码的复用性和可读性。