正在回答 回答被采纳积分+1
同学你好,
首先解释一下为什么不是A中的g方法。
因为这里调用的是ab.u.g(42);
也就是调用的u 这个对象的g()方法;
那u对象是谁呢?
根据 A的结构以及构造方法,我们可以看到是
相当于
B u = new C();
按照同学的推理,应该是u调用g()方法的时候,应该显示的是C类中的g()方法呀
为啥会显示B类中的呢?
同学可能忽略了一个细节
如果C类中重写了父类的方法,则调用时,是调用子类的方法。
但是:
参数是不同的,所以,子类中根本就没有重写父类中的g()方法;
所以只能调用的是父类中的g()方法了。
如果同学存在疑惑,可以把C类中的g();方法的参数类型改为double
就会输出C.g(int) 了。
如果我的回答解决了你的问题,请采纳,祝学习愉快.
同学你好,在<>中 u继承了b,而U u就是U类的引用。如下图所示:
而<>是泛型,泛型本质上是提供类型的“类型参数”,也就是参数化类型。我们可以为类、接口或方法指定一个类型参数,通过这个参数限制操作的数据类型,从而保证类型转换的绝对安全。具体讲解,同学可学习《Java泛型》课程(http://class.imooc.com/course/995 )
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,1. 因为 U继承B而 B又继承A,在Poly类中U类可以调用a类与b类两个类中的方法,所以Aufruf 1与Aufruf 2通过ab引用调用U类再调用B类中的g()方法,输出B.g(double),
2. Aufruf 3通过ab引用调用A类中的g()方法,输出 A. g(double) 。
3. 而Poly类中ac引用强制转换为a类,所以Aufruf 5 调用A类中的g()方法,输出B.g(double)。
4. Poly类中ac引用强制转换为a类,所以调用两个参数的g(),则找不到此方法,导致编译性错误。如下图所示:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星