Animal.java
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void speak() {
// 基类的方法没有具体实现
}
}
Dog.java
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void speak() {
System.out.println("Woof!");
}
}
Cat.java
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void speak() {
System.out.println("Meow!");
}
}
Main.java
public class Main {
public static void main(String[] args) {
// 创建 Animal 对象实例
Animal animal = new Animal("Animal");
System.out.println(animal.getName()); // 输出: Animal
animal.speak(); // 没有输出,基类的方法没有具体实现
// 创建 Dog 对象实例
Dog dog = new Dog("Buddy");
System.out.println(dog.getName()); // 输出: Buddy
dog.speak(); // 输出: Woof!
// 创建 Cat 对象实例
Cat cat = new Cat("Kitty");
System.out.println(cat.getName()); // 输出: Kitty
cat.speak(); // 输出: Meow!
}
}
在上述代码中,我们定义了一个基类 Animal,它有一个属性 name 和一个未具体实现的方法 speak。然后,我们创建了两个子类 Dog 和 Cat,它们都继承了基类 Animal,并重写了基类中的 speak 方法以产生不同的行为。在 Main 类中,我们创建了 Animal、Dog 和 Cat 的对象实例,可以看到它们都能正确地输出名字和产生不同的 speak 声音。