假设我有一个名为ParentClass的类和一个名为ChildClass的类

ParentClass是抽象的,并且ChildClass根据Java术语扩展了ParentClass。此外,ParentClass具有一个构造函数,该构造函数将int作为参数。现在在另一个类中,我要实例化ChildClass。我尝试了以下两种方法:


ChildClass obj1 = new ChildClass(5)
ParentClass obj2 = new ChildClass(5)


Java允许我使用以上两种方式中的任何一种。我的问题是,实际上有什么区别吗?如果需要,可以互换使用两者吗?

最佳答案

两者都起作用,并且都在内存中创建相同的对象。但是只有第一个允许您使用ChildClass父类不知道的其他特定属性或方法。

范例:

abstract class ParentClass{
   ...
}

class ChildClass extends ParentClass {

   public void SomeChildMethod(){ ... }
   ...
}

...


ChildClass obj1 = new ChildClass(5);
ParentClass obj2 = new ChildClass(5);

obj1.SomeChildMethod(); // ok
obj2.SomeChildMethod(); // compilation error
((ChildClass)obj2).SomeChildMethod(); // ok


因此,仅在确定不再需要特定的子方法或属性(如果有)的情况下,才使用第二种实例化方法。

10-07 23:32