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 方法,以及客户端代码将如何使用创建的实例。
如果你采用 List
和 ArrayList
(List
是一个接口,但它对示例有效),通常你会选择 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。
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 方法,以及客户端代码将如何使用创建的实例。
如果你采用 List
和 ArrayList
(List
是一个接口,但它对示例有效),通常你会选择 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。