java - 实例化(子)类时,您将对象声明为 "type"有什么区别吗?

标签 java inheritance subclass instantiation

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

ParentClass 是抽象的,ChildClass 扩展了每个 Java 术语的 ParentClass。此外,ParentClass 有一个构造函数,它采用 int 作为参数。现在,在另一个类中,我想实例化 ChildClass。我尝试过以下两种方法:

  1. ChildClass obj1 = new ChildClass(5)
  2. 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/

相关文章:

java - Bundle 中值的 "Order"

java - 自动化安装过程

grails - Grails/GORM 中的继承和约束问题

python - 重新定义现有函数

ios - UIButton 子类标题更改

java - 远程EJB的理解

java - 如何一起使用 log4j 2.0 和 slf4j 以及 Commons Logging

c# - C# 是否为未使用的模板参数生成具体实现?

c++ - 使用 SFINAE 检查 C++ 中的模板父类

kotlin - 如何限制 Kotlin 中的枚举?