Java接口,继承QUESTION 31Given:1. interface A { public void aMeth

Java接口,继承
QUESTION 31
Given:
1. interface A { public void aMethod(); }
2. interface B { public void bMethod(); }
3. interface C extends A,B { public void cMethod(); }
4. class D implements B {
5. public void bMethod(){}
6. }
7. class E extends D implements C {
8. public void aMethod(){}
9. public void bMethod(){}
10. public void cMethod(){}
11. }
What is the result?
A. Compilation fails because of an error in line 3.
B. Compilation fails because of an error in line 7.
C. Compilation fails because of an error in line 9.
D. If you define D e = new E(), then e.bMethod() invokes the version of bMethod() defined in Line 5.
E. If you define D e = (D)(new E()), then e.bMethod() invokes the version of bMethod() defined in Line 5.
F. If you define D e = (D)(new E()), then e.bMethod() invokes the version of bMethod() defined in Line 9.
Answer: F
这里的强制类型转换十分不理解 还请高手详细解析一下这题
愚虎 1年前 已收到1个回答 举报

fancyustc 幼苗

共回答了18个问题采纳率:100% 举报

E是D的子类所以E的实例可以声明为D类型
变量e声明类型是D( D e ), 而实际类型是E( new E() ),不需要进行显示类型转换
D e = (D)(new E()) 和 D e = new E()没有区别
因为把变量e声明为D类型,D实现(implements)B,所以e可以调用方法bMethod()
但是变量e的实际类型是E,E这个类覆盖了D类的bMethod(第9行不写的话调用的是第5行的bMethod,写了就覆盖了D的bMthod)
所以e.bMethod()调用的就是第9行也就是覆盖父类方法的bMethod()

1年前

6
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 16 q. 0.021 s. - webmaster@yulucn.com