【发布时间】:2022-02-02 10:38:41
【问题描述】:
我有这些课程
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";}
}
然后在主课我有这个
public 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);
}
}
为什么我会得到这个:
Student joining an online lecture
Joining an online lecture
Student joining an online lecture
而不是这个:
Joining an online lecture
Teacher joining an online lecture
Joining an online lecture
如果我传递了一个 OnlineLecture 实例,为什么代码表现得像一个 Lecture 实例?教师类覆盖了 join(OnlineLecture lec),但仍调用父类的。
【问题讨论】:
标签: java inheritance types type-conversion extends