编写程序实现以下逻辑。 类Animal 具有一个实例方法cry。 ②类Dog继承Animal,并实现cry方法。 ③ 类Cat 继承Animal并实现cry方法。 编写测试类,分别实现利用上转型实现多态,利用Animal类参数实现多态。
时间: 2025-06-09 08:02:19 浏览: 19
首先,让我们创建一个基础的`Animal`类,然后定义`Dog`和`Cat`子类,以及它们各自的cry方法。接着,我们会写一个测试类来演示这两种多态的用法。
```java
// Animal.java
public abstract class Animal {
public abstract void cry();
}
// Dog.java
public class Dog extends Animal {
@Override
public void cry() {
System.out.println("Dog is barking");
}
}
// Cat.java
public class Cat extends Animal {
@Override
public void cry() {
System.out.println("Cat is meowing");
}
}
// TestClass.java
public class TestClass {
public static void main(String[] args) {
// 上转型实现多态 (dynamic polymorphism)
Animal animal1 = new Dog(); // 创建Dog对象但引用为Animal类型
animal1.cry(); // 输出 "Dog is barking"
Animal animal2 = new Cat(); // 创建Cat对象但引用为Animal类型
animal2.cry(); // 输出 "Cat is meowing"
// 通过Animal类参数实现多态 (polymorphism with method reference)
testWithMethodReference(animal1);
testWithMethodReference(animal2);
// 定义用于处理Animal对象的方法
private void testWithMethodReference(Animal animal) {
animal.cry(); // 输出相应的动物叫声
}
}
}
```
在这个例子中:
1. `Animal`类是抽象的,包含了抽象方法`cry()`,`Dog`和`Cat`子类都实现了这个方法。
2. 测试类`TestClass`中的`main`方法展示了如何使用上转型(即在编译时不知道具体类型的变量)调用不同子类的`cry()`方法。
3. `testWithMethodReference`方法接受一个`Animal`类型的参数,不论传入的是`Dog`还是`Cat`对象,都会根据实际类型执行相应的方法。
运行这段代码后,你可以看到两种多态行为的效果。
阅读全文
相关推荐



















