猫狗案例练习多态版,实现向上转型和向下转型并利用接口加入跳高的额外功能
时间: 2024-11-20 16:37:42 浏览: 12
在猫狗案例中,我们可以创建两个类Cat和Dog作为宠物的一般抽象,然后定义一个共同的接口Animal,这个接口包含一些通用的行为,如叫声(makeSound)、跳跃(jump)。接下来,我们分别让Cat和Dog实现Animal接口,并添加各自特有的属性和方法。
**向上转型(Upcasting):** 如果有一个Animal类型的引用指向了具体的Cat对象,那么这个引用可以被提升为更广泛的类型Cat或Animal。例如:
```java
public interface Animal {
void makeSound();
void jump();
}
class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("喵~");
}
@Override
public void jump() {
System.out.println("猫能轻轻一跃");
}
}
Dog dog = new Dog(); // 创建Dog对象
Animal catRef = dog; // 向上转型
catRef.makeSound(); // 输出 "汪汪~"(假设Dog也实现了makeSound)
catRef.jump(); // 输出 "猫能轻轻一跃",虽然理论上狗也可以跳,但在这种简化场景下没有具体实现
```
**向下转型(Downcasting):** 可以将Animal类型的引用转换回具体的类型,比如Dog。但是需要谨慎处理,因为如果尝试转换错误的对象,可能会导致ClassCastException:
```java
Dog myDog = (Dog) catRef; // 假设我们知道这是Dog
myDog.bark(); // 假设Dog有bark方法
```
**加入跳高功能(Interface extension):** 如果想增加额外的功能,可以在Animal接口之外创建一个新的接口HighJumper,专门用于表示能够跳高的动物。然后让Cat和Dog实现这个新接口:
```java
interface HighJumper {
void highJump();
}
class Dog extends Animal implements HighJumper {
@Override
public void makeSound() {
System.out.println("汪汪~");
}
@Override
public void jump() {
System.out.println("狗跳得较高");
}
@Override
public void highJump() {
System.out.println("狗能做高空跳跃");
}
}
// ... 继续其他操作
```
在这个例子中,Dog类既实现了Animal接口又实现了HighJumper接口,所以它既可以正常跳也可以进行高跳。
阅读全文