正在回答
同学你好,对于同学描述的这部分“b.f()方法调用d对象为参数,由于D类继承C类,所以在f()方法中接收的参数可以是他的父类.结果为 B.f(c)
c.f()方法为非静态方法,调用子类D,因为B类是静态类且父类是A,所以调用父类A。结果 D.f(A)”是正确的。
c.g()理解的有点偏差,这里this表示当前对象的含义。因为b对象赋值给了a对象,所以当前对象的引用指向的是B对象。所以会调用C类的g方法的B类型的参数。所以最后输出“C.g(B)”
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,这里老师以第一个为例,首先在main方法中分别创建4个类的对象,然后通过a对象调用A类的f()方法,并传入d对象为参数,由于D类继承C类,所以在f()方法中接收的参数可以是他的父类。然后在f方法中首先输出 信息 A.f(C),具体如下:
然后由于D类继承C类,参数进行了向上转型,Java中规定,如果调用的方法是静态的他就会调用父类的静态方法。如果调用的方法是非静态的方法,它就会调用子类的对应普通方法。
所以由于f方法为普通方法,所以会调用子类D的f()方法,并将this当前对象传入,也就是A类的对象。所以输出D.f(A),具体如下:
而g方法,是静态方法,方法是静态的他就会调用父类的静态方法,也就是C类中的g()方法。所以输出为C.g(A),具体如下:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,
1、第一个位置处代码的结果为:
A.f(C)
D.f(A)
C.g(A)
第二个位置处代码的结果为:
A.g()
第三个位置处代码的结果为:
B.f(C)
D.f(A)
C.g(B)
第四个位置处代码的结果为:
B.f(C)
D.f(A)
C.g(B)
第五个位置处代码的结果为:
B.f(C)
D.f(A)
C.g(B)
2、同学所询问的括号中的代码,是指的main方法中括号的内容吗?如果是的话,括号中代表调用方法传入对象。
3、同学的这个问题涉及到之后学习的面向对象、封装、继承等章节的内容,建议同学继续向后学习,才能理解这个代码的含义。具体如下:
4、老师将代码粘贴出来,等到同学学习完之后的内容,再来回顾这个代码,会更加利于理解。
public class Poly { static class A { void f(C c) { System.out.println("A.f(C)"); c.f(this); c.g(this); } static void g() { System.out.println("A.g()"); } } static class B extends A { void f(D d) { System.out.println("B.f(D)"); d.f(this); ((C) d).g(this); } void f(C c) { System.out.println("B.f(C)"); c.f(this); c.g(this); } static void g() { System.out.println("B.g()"); } } static class C { void f(A a) { System.out.println("C.f(A)"); } static void g(A a) { System.out.println("C.g(A)"); } static void g(B b) { System.out.println("C.g(B)"); } } static class D extends C { void f(A a) { System.out.println("D.f(A)"); } void f(B b) { System.out.println("D.f (B)"); } static void g(A a) { System.out.println("D.g(A)"); } static void g(B b) { System.out.println("D.g(B)"); } } public static void main(String[] args) { A a = new A(); B b = new B(); C c = new C(); D d = new D(); a.f(d);// Aufruf 1 System.out.println("======="); a.g();// Aufruf 2 System.out.println("======="); a = b; c = d; a.f(c); // Aufruf 3 System.out.println("======="); a.f(d); // Aufruf 4 System.out.println("======="); b.f(c);// Aufruf 5 } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星