【发布时间】:2021-02-11 16:56:57
【问题描述】:
代码是这样的:
class Main {
public static void main(String args[]) {
Person p1 = new Student();
Person p3 = new Teacher();
Student p4 = new Student();
OnlineLecture lec3 = new OnlineLecture();
lec3.addAttendant(p1);
lec3.addAttendant(p3);
lec3.addAttendant(p4);
}
}
abstract class Person {
public void join(Lecture lec) {
System.out.println("Joining "+lec);
}
public void join(OnlineLecture lec) {
System.out.println("Joining "+lec);
}
}
class Student extends Person {
public void join(Lecture lec) {
System.out.println("Student joining "+lec);
}
}
class Teacher extends Person {
public void join(OnlineLecture lec) {
System.out.println("Teacher joining "+lec);
}
}
class Lecture {
public void addAttendant(Person p) {
p.join(this);
}
public String toString() {
return "a lecture";
}
}
class OnlineLecture extends Lecture {
public String toString() {
return "an online lecture";
}
}
我不明白为什么我得到的输出是这样的:
Student joining an online lecture
Joining an online lecture
Student joining an online lecture
不应该在 lec3 上调用的 'addAttendant' 方法中的 'join(this)' 导致 'join(OnlineLecture lec3)',因此给出这个
Joining an online lecture
Teacher joining an online lecture
Joining an online lecture
作为输出?
【问题讨论】:
-
@Progman 不是真的,因为我对这个具有不同类之间交互的特定示例和
this参考感兴趣。
标签: java this subclass superclass