gpt4 book ai didi

java - 将类转换为不相关的接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:08 26 4
gpt4 key购买 nike

显然,这会导致编译错误,因为 Chair 与 Cat 无关:

class Chair {}
class Cat {}

class Test {
public static void main(String[] args) {
Chair chair = new Char(); Cat cat = new Cat();
chair = (Chair)cat; //compile error
}
}

为什么当我将 Cat 引用转换为不相关的接口(interface) Furniture 时,我只会在运行时出现异常,而编译器显然可以告诉 Cat 没有实现 Furniture?

interface Furniture {}

class Test {
public static void main(String[] args) {
Furniture f; Cat cat = new Cat();
f = (Furniture)cat; //runtime error
}
}

最佳答案

编译的原因

interface Furniture {}

class Test {
public static void main(String[] args) {
Furniture f;
Cat cat = new Cat();
f = (Furniture)cat; //runtime error
}
}

是你很可能拥有

public class CatFurniture extends Cat implements Furniture {}

如果您创建一个 CatFurniture 实例,您可以将它分配给 Cat cat,然后该实例可以转换为 Furniture。换句话说,某些 Cat 子类型可能确实实现了 Furniture 接口(interface)。

在你的第一个例子中

class Test {
public static void main(String[] args) {
Chair chair = new Chair();
Cat cat = new Cat();
chair = (Chair)cat; //compile error
}
}

某些 Cat 子类型不可能扩展 Chair 除非 Cat 本身从 Chair 扩展。

关于java - 将类转换为不相关的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com