Java 我尝试使用多态性,但我的代码并不像我预想的那样工作,有人能帮我解决这个问题吗?

Java 我尝试使用多态性,但我的代码并不像我预想的那样工作,有人能帮我解决这个问题吗?,java,class,inheritance,polymorphism,extend,Java,Class,Inheritance,Polymorphism,Extend,UserManager.java: public class UserManager { public void add(User user) { System.out.println(user.getUserNumber() + " user added"); } } public class StudentManager extends UserManager { @Override public

UserManager.java:

public class UserManager {
        public void add(User user) {
            System.out.println(user.getUserNumber() + " user added");
        }
}
public class StudentManager extends UserManager {
    @Override
    public void add(User user) {
        System.out.println(user.getUserNumber() + "  student added");
    }
}
StudentManager.java:

public class UserManager {
        public void add(User user) {
            System.out.println(user.getUserNumber() + " user added");
        }
}
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用户添加


为什么我会得到这个输出?

如果你想像你期望的那样使用polyformphism,你应该将
UserManager
对象实例化为
StudentManager
,这样JVM就会调用覆盖的
add
方法。以下是正确的方法:

公共类主{
公共静态void main(字符串[]args){
学生1=新学生();
学生1.设置用户号码(“12345”);
UserManager UserManager=newstudentmanager();
userManager.add(student1);
}
}

您创建了一个
UserManager
实例,因此调用了
UserManager
方法。这是预期的行为。你有没有打算做
UserManager UserManager=newstudentmanager()?Java不会神奇地选择您的
StudentManager
当您使用
Student
对象调用
UserManager
时,
UserManager
实例必须是
StudentManager
的实例,只需将
new UserManager()
更改为
new StudentManager()
如果您想要@Lino神奇地提及功能,您必须利用Vissitor设计模式。“预期输出:12345学生添加”-您能否具体说明您预期该输出的原因?断言“X必须为真,因为Y为真”,然后检查代码以确定Y是否为真,这是一个相当标准的调试过程。在你的情况下,你可能会发现事实并非如此。例如,您可能希望得到该输出,因为您使用的是
StudentManager
实例。但是检查您的代码会发现您没有使用
StudentManager
实例。@卢卡斯感谢编辑,我在提交答案时注意到格式错误,我已经编辑过了。无论如何,谢谢你:)