有人可以向我解释评论中的两行是如何编制的吗?
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);
}
答案 0 :(得分:4)
他们不会工作。你会得到一个ClassCastException。
将编译好,因为编译器不知道a不是A的子类也实现了G(例如B)。但是,在运行时,当您尝试强制转换时,它将失败。
除非绝对没有选择,否则这是人们不应该施展的重要原因之一。它打破了编译器带来的很多类型安全性。