Java 我尝试使用多态性,但我的代码并不像我预想的那样工作,有人能帮我解决这个问题吗?
UserManager.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
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
实例。@卢卡斯感谢编辑,我在提交答案时注意到格式错误,我已经编辑过了。无论如何,谢谢你:)