DSF*_*DSF 2 java inheritance subclass instantiation
假设我有一个被调用ParentClass的类和一个被调用的类ChildClass
它ParentClass是抽象的,并ChildClass扩展了ParentClass每个Java术语.此外,它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
Run Code Online (Sandbox Code Playgroud)
因此,只有在您确定永远不需要特定的子方法或属性(如果有)时,才使用第二个实例化方法.