【发布时间】:2021-07-27 20:41:34
【问题描述】:
UserManager.java:
public class UserManager {
public void add(User user) {
System.out.println(user.getUserNumber() + " user added");
}
}
StudentManager.java:
public class StudentManager extends UserManager {
@Override
public void add(User user) {
System.out.println(user.getUserNumber() + " student added");
}
}
Main.java:
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
student1.setUserNumber("12345");
UserManager userManager = new UserManager();
userManager.add(student1);
}
}
预期输出:已添加 12345 名学生。
实际输出:12345 个用户添加。
为什么我得到这个输出?
【问题讨论】:
-
您创建了一个
UserManager实例,因此调用了UserManager方法。这是预期的行为。你有没有故意做UserManager userManager = new StudentManager();? -
当您使用
Student对象调用UserManager时,Java 不会神奇地选择您的StudentManager,userManager实例必须是@ 的实例987654331@ -
把
new UserManager()改成new Studentmanager() -
如果你想要@Lino 提到的神奇功能,你必须使用访问者设计模式。
-
“预期输出:12345 学生已添加” - 您能否具体说明您期望该输出的原因?断言“X 必须为真,因为 Y 为真”是一个相当标准的调试过程,然后检查您的代码以查看 Y 是否真的为真。在你的情况下,你可能会发现它不是。例如,您可能期望该输出,因为您使用的是
StudentManager实例。但是检查您的代码会发现您在任何地方都没有使用StudentManager实例。
标签: java class inheritance polymorphism extend