Java : 以下对象创建方法在编程使用方面有何区别?

Java : What is the difference between the below object creation methodologies in terms of programing usage?

public class SuperClass {}
public class ChildClass extends SuperClass {}

SuperClass  A = new ChildClass();

ChildClass B  = new ChildClass(); 

对于实例 A 和 B,我们只能访问 super class 的受保护方法。那么两者有什么区别,用在哪些地方呢?提前致谢

a.getClass().getName();

为什么这很重要?

public class SuperClass {}
public class SonClass extends SuperClass {}
public class DaughterClass extends SuperClass {}

SuperClass[] Arr = new SuperClass[2];
Arr[0] = new SonClass();
Arr[1] = new DaughterClass()

重要的是与 A 相比,B 将提供哪些额外的 public 方法,以及客户端代码将如何使用创建的实例。

如果你采用 ListArrayListList 是一个接口,但它对示例有效),通常你会选择 class 实现它自己的功能:ArrayList 是一个自动递增的向量,提供对其元素的持续访问。但是 class 的客户端可能并不真正关心 List 实现的种类,您将有更多的灵活性来将此实例用作提供列表 [=] 的简单 List 34=]抽象.

另一个案例是关于多态性的。如果您使用其他 class 扩展您的示例,例如

 public class AnotherChildClass extends SuperClass {}

并且您需要处理来自 2 个子 classes 的对象列表,例如

List<SuperClass> myList = new ArrayList<>();
myList.add(new ChildClass());
myList.add(new AnotherChildClass());
myList.add(new ChildClass());
//...

// later
(for (SuperClass s : myList) {
   s.doSomeThing();
}

假设方法 doSomeThing() 已在 SuperClass 中声明并由两个子 class 实现(或在 SuperClass 中实现并可能被覆盖)。

您的问题与 OOP 的基本部分有关,即 abstraction