在某个程序中,父类是超级孩子。以下是什么区别b / n。
Parent obj1=new Parent();
Parent obj2=new Child();
Child obj3=new Child();
答案 0 :(得分:1)
它们是三个不同的对象,两个是Parent类(超类),另一个是Child类(子类)。
Java中的Inhertience:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
答案 1 :(得分:1)
好的,此处显示的关键概念称为Polymorphism。现在回答你的问题,这是什么意思?
父obj2 = new Child();
这意味着您正在尝试通过其父级引用您的孩子,请记住,在这种情况下,您的孩子已经继承了父级的属性,您可以通过父类型的引用访问那些通过父级知道的属性是合乎逻辑的(基本上是oops的继承和静态多态。
要向它添加更多内容,只有那些父母知道的属性才能通过父类型的引用来访问,因为父母不知道有关孩子可能暴露的功能的任何内容,但它确实知道孩子正在拥有属性由他介绍。
答案 2 :(得分:1)
parent obj1=new parent();
此处引用变量(obj1)是父类型,在堆上创建的对象也是如此
parent obj2=new child();
此处引用变量(obj2)是父类型,并且对象(新子项)已创建堆上的子类型
child obj3=new child();
这与第一点相同。这里引用变量和对象都是子类型,与父类型
在8.4. Method Declarations -> Inheritance, Overriding, and Hiding和9.4. Abstract Method Declarations -> Inheritance and Overriding
了解详情答案 3 :(得分:1)
obj1(第1行)和obj3(第3行)实际上是您通常使用的普通旧对象初始化。 obj2(第2行)是有趣的。它允许你保持你的调用代码基本相同,同时使用上面已经解释的继承的概念来替换不同的孩子,从而在运行时表现出不同的行为。(使用相同的父句柄和使用此句柄的相同方法调用)
答案 4 :(得分:1)
第一个几乎是显而易见的:你实例化同一个类的对象。这意味着,对象obj1
构造/实例化的方式与其类的任何其他实例相同。它具有相同的成员变量和相同的方法。
Parent obj1 = new Parent();
下一个几乎与上面相同。仅作为程序员,我们知道Child
是Parent
的子类,因此具有与其父类似的属性。但是,子类可以覆盖某些属性并更改其功能。
Child obj3=new Child();
因此,如果您致电obj3.parentMethod()
,结果可能会与obj1.parentMethod()
不同。但我们无法确切知道。
第三个是实际有趣的部分:
Parent obj2=new Child();
您有一个obj2
,它是类Parent
的一个实例。但是,您将它实例化为Child
实例,因此它的工作就像Child
实例一样(例如,当一个方法被覆盖时)但它没有 all 一个孩子的属性..它仍然有这些属性,它将使用它们....但你将无法访问任何子方法。所以看起来像<{1}} ,但它的行为类似于Parent
。
对于任何进一步(更精确)的信息,您应该阅读this或其他答案中分享的链接。