编写Animal接口,接口中定义sleep()方法。 2)Cat类和Pig类分别实现Animal接口的方法 3)编写测试类Example14对对象的类型进行转换,使Cat向上转型为Animal类型,然后再让Animal类型转换为Pig类型。
时间: 2024-10-21 12:15:15 浏览: 38
抽象类与接口(学习笔记)
5星 · 资源好评率100%
首先,我们创建一个名为`Animal`的接口,其中包含一个方法`sleep()`:
```java
public interface Animal {
void sleep();
}
```
接下来,我们将定义两个类`Cat`和`Pig`,它们都实现了`Animal`接口并实现了`sleep()`方法:
```java
public class Cat implements Animal {
@Override
public void sleep() {
System.out.println("猫正在睡觉...");
}
}
public class Pig implements Animal {
@Override
public void sleep() {
System.out.println("猪正在熟睡...");
}
}
```
现在,我们创建一个名为`Example14`的测试类,用于演示对象类型转换:
```java
public class Example14 {
public static void main(String[] args) {
// 创建一个Cat对象并将其向上转型为Animal类型
Animal cat = new Cat();
// 执行Cat的sleep方法
cat.sleep(); // 输出:猫正在睡觉...
// 将Animal类型转换为Pig类型,因为Java不支持向下强制转型,所以需要使用instanceof检查
if (cat instanceof Pig) {
Pig pig = (Pig) cat; // 这里是一个隐式转换,实际上并没有改变对象,只是改变了引用类型
pig.sleep(); // 输出:猪正在熟睡...
}
// 尝试将Animal类型直接转换为Pig类型,会抛出ClassCastException,因为这通常是不允许的
try {
Pig anotherPig = (Pig) cat; // 这一行会报错,因为cat实际上是Cat对象
} catch (ClassCastException e) {
e.printStackTrace();
}
}
}
```
在这个例子中,虽然理论上可以尝试将`Animal`类型的对象转换为更具体的类型,但在实际操作中,如果无法确定对象确实是指定类型,应该避免这样做。
阅读全文