正在回答
同学你好,对于同学描述的这部分“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 星