我今天正在用Java进行考试,考官问我是否可以在Spring Boot项目中提供使用多态的任何示例。
[起初我什么都没想到,他指出我已经在模型中覆盖了[[toString(),这是动态/运行时多态性。
但是,我不确定我是否理解他的观点,因为据我所知,当我们具有指向子类对象的父类参考变量(专注于动态多态)时,行为被视为多态的。然后在运行时获取父类变量指向的实际对象,并调用其方法,如here很好地解释。
但是,我没有在项目中使用向上转换(即,使用Object类变量初始化POJO类)。
因此,我的问题是-
尽管父类(Object)从未用作引用变量,但是重写toString()被视为多态性吗?
[我在Stackoverflow上找到的所有运行时多态示例,包括带有toString的here和this,说明了我们有一个指向子类对象的父类变量,例如: Object object = new User("petar");
String name = object.toString(); // assign to variable for clarity`s sake
System.out.println(name);
// prints petar
我的用户类别是:
public class User {
String name;
public User(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
但是,在我的项目中,我只是使用自己的参考变量来创建用户和其他POJO类,例如:
User user = new User("petar");
String name = user.toString();
System.out.println(name);
// prints petar, as toString is overriden
我的同学认为是这样,因为对于以上是否考虑了多态性,尽管没有涉及上调/父参考变量?
非最终实例方法
,编译器不知道要调用哪个方法-它仅确保超类中存在该方法,因此会延长此决定直到运行时(late binding),方法是将一条指令插入已编译的代码中,然后对其进行检查,然后提取该变量指向的实际对象,并调用其方法(source)。 但是,在this article中指出:方法重写是运行时多态性的一个示例。当,因为在方法调用期间将执行哪个方法(父类或子类)由对象的类型决定。该过程在其中调用覆盖的方法在运行时被解析为动态方法派遣。所以:方法重写是否足以实现多态性,还是要求对子类对象有父类引用?我在采访中可以肯定地说,仅重写toString()是多态的一个例子吗?
我今天正在用Java进行考试,考官问我是否可以在Spring Boot项目中提供使用多态的任何示例。起初我什么都没想到,他指出...