在Java中,继承是面向对象编程的一个基本特性,它允许子类继承父类的属性和方法。多态则是Java中的另一个核心概念,它允许我们使用父类类型的变量来保存子类类型的对象,并且在运行时动态地选择正确的方法执行。以下是如何创建这些类以及如何展示继承和多态的基本应用。
首先,我们定义一个Animal类作为基类,它有两个属性:name和species,以及一个方法makeSound(),用于动物发声。
public class Animal {
private String name;
private String species;
public Animal(String name, String species) {
this.name = name;
this.species = species;
}
public String getName() {
return name;
}
public String getSpecies() {
return species;
}
public void makeSound() {
System.out.println(this.species + " is making a sound");
}
}
接着,我们创建Dog和Cat类作为Animal的子类。Dog类和Cat类都覆盖了makeSound()方法,以便为狗和猫分别提供独特的声音。
public class Dog extends Animal {
public Dog(String name, String species) {
super(name, species);
}
@Override
public void makeSound() {
System.out.println(this.species + " is barking");
}
}
public class Cat extends Animal {
public Cat(String name, String species) {
super(name, species);
}
@Override
public void makeSound() {
System.out.println(this.species + " is meowing");
}
}
现在,我们来展示如何使用这些类来实现多态。我们创建一个Animal类型的变量animal,并将其指向一个Dog对象。然后我们调用makeSound()方法。由于我们使用的是Animal类型的变量,但实际调用的是Dog类的makeSound()方法,这就是多态的应用。
public class Test {
public static void main(String[] args) {
Animal animal;
animal = new Dog("Rex", "Dog");
animal.makeSound(); // 输出: Dog is barking
animal = new Cat("Felix", "Cat");
animal.makeSound(); // 输出: Cat is meowing
}
}
在上面的代码中,animal变量可以保存Dog或Cat对象,这是因为Dog和Cat都是Animal的子类。当我们调用makeSound()方法时,Java运行时会根据实际的对象类型来决定调用哪个类中的方法。这就是多态的魔法——同一个方法名在不同子类中具有不同的实现。
总之,通过定义基类Animal和子类Dog、Cat,并展示如何使用这些类来调用方法,我们展示了Java中的继承和多态的基本应用。在实际开发中,这些概念是面向对象设计的核心,它们帮助我们创建灵活、可扩展和可维护的代码。