问题描述
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
对象实例化为 StudentManager
,这样 JVM 将调用覆盖的 add
方法。这是正确的方法:
public class Main {
public static void main(String[] args) {
Student student1 = new Student();
student1.setUserNumber("12345");
UserManager userManager = new StudentManager();
userManager.add(student1);
}
}