接口转换成实现类(向下转型)
时间: 2023-11-12 16:08:39 浏览: 39
接口转换成实现类,也叫向下转型,是指将一个接口类型的引用转换为其实现类类型的引用。这个转换只能在编译时和运行时都确定的情况下进行,否则会抛出ClassCastException异常。
下面是一个示例代码:
```java
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle");
}
}
public class Test {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw(); // Drawing a circle
Circle circle = (Circle) shape; // 向下转型
circle.draw(); // Drawing a circle
Shape shape2 = new Rectangle();
shape2.draw(); // Drawing a rectangle
Circle circle2 = (Circle) shape2; // 抛出ClassCastException异常,因为shape2实际上是Rectangle类型的实例
}
}
```
在上面的代码中,我们定义了一个Shape接口和两个实现类Circle和Rectangle。在main方法中,我们通过向上转型将一个Circle类型的实例赋值给了一个Shape类型的变量。然后,我们又通过向下转型将这个Shape类型的变量转换为Circle类型的变量,并调用了它的draw方法。
需要注意的是,向下转型可能会抛出ClassCastException异常,因为实际上被转换的对象可能并不是我们期望的类型。在上面的代码中,我们试图将一个Rectangle类型的实例转换为Circle类型的变量,这显然是不合法的,因此会抛出ClassCastException异常。因此,在进行向下转型之前,我们需要确保被转换的对象的实际类型就是我们期望的类型。