gpt4 book ai didi

java - 理解类型转换问题的问题

转载 作者:行者123 更新时间:2023-11-30 07:33:09 25 4
gpt4 key购买 nike

有人可以向我解释一下评论下的两行是如何编译的吗?

A a = new A();
B b = new B();
C C = new C();

// How can these work?
((G) a).methodG(a);
((B) a).methodG(a);

public class A {
A methodA() {
return this;
}
}
public class B extends A implements G {
B methodB(A a) {
return this;
}
public G methodG(A a) {
return (G) this;
}
}

public class C implements G{
C methodC(G g) {
return this;
}
public G methodG(A a) {
return (G) this;
}
}

public interface G {
G methodG(A a);
}

最佳答案

它们不会起作用。你会得到一个 ClassCastException。

编译得很好,因为编译器不知道 a 不是同样实现了 G(例如 B)的 A 的子类。但是,在运行时,当您尝试转换时,它会失败。

这就是除非别无选择,否则人们不应该施法的重要原因之一。它破坏了您通过编译器获得的许多类型安全性。

关于java - 理解类型转换问题的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063838/

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