假设我有一个名为 ParentClass
的类和一个名为 ChildClass
的类
ParentClass
是抽象的,ChildClass
扩展了每个 Java 术语的 ParentClass
。此外,ParentClass
有一个构造函数,它采用 int
作为参数。现在,在另一个类中,我想实例化 ChildClass
。我尝试过以下两种方法:
ChildClass obj1 = new ChildClass(5)
ParentClass obj2 = new ChildClass(5)
Java 允许我使用以上两种方式中的任何一种。我的问题是,实际上有什么区别吗?如果我愿意的话,我可以交替使用两者吗?
最佳答案
两者都有效,并且都在内存中创建相同的对象。但只有第一个允许您使用 ChildClass 的其他特定属性或 ParentClass 不知道的方法。
示例:
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
因此,仅当您确定永远不需要特定的子方法或属性(如果有)时,才使用第二种实例化方法。
关于java - 实例化(子)类时,您将对象声明为 "type"有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644442/