我正在学习Java,但我不理解这些作业之间的区别:
Superclass x = new Superclass();
Superclass x = new Subclass();
Subclass x = new Subclass();
Subclass扩展Superclass的地方。我的意思是我知道第一个赋值可以引用所有扩展超类的子类,并且最后一个只能接受特定子类的引用。我也知道在第二个任务中,Superclass是"静态类型" (不知道说它是否正确)在编译时检查并且子类是"动态类型"在运行时检查。但我无法想象一个用例,其中最好选择第二个赋值而不是其他两个赋值。所以如果你能解释一下这些作业有什么不同,那就太好了!谢谢:))
答案 0 :(得分:0)
您的第一行和最后一行代码将构造函数引用分配给相同的类类型,并将其称为静态绑定,即编译时绑定。而第二行通常是动态绑定或运行时绑定。
//First Line
Superclass x = new Superclass();
//Third Line
Subclass x = new Subclass();
在引用相同类构造函数的第一行和第三行代码中。这表示在此引用中它始终指向类的当前实例和引用静态方法和变量。
//Second Line
Superclass x = new Subclass();
这里我们将此方法称为java中的动态绑定,这是java中的继承属性,允许父类引用引用的子类对象。此方法主要用于具有多个子类且所有子类都抽象为其父类时因此,您不需要为创建多个子引用而烦恼,而且可以实现运行时多态性。
以下是清除概念的示例
class Superclass {
public static void getClassName()
{
System.out.println("Superclass static method called");
}
}
class Subclass extends Superclass {
public static void getClassName(){
System.out.println("Subclass ");
}
public static void main( String args[]) {
/* Reference is of Superclass type and object is
* Subclass type
*/
Superclass obj = new Subclass();
/* Reference is of Superclass type and object is
* of Subclass type.
*/
Superclass obj2 = new Superclass();
obj.getClassName();
obj2.getClassName();
}
}
//The output will be
Superclass static method called
Superclass static method called
由于引用始终引用父静态方法