当前位置: 首页 > 面试题库 >

为什么不能引用子类对象引用父类对象?

邵星光
2023-03-14
问题内容

我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻?

我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P

class Parent
{
  int prop1;
  int prop2;
}

class Child : Parent // class Child extends Parent  (in case of Java Lang.)
{
  int prop3;
  int prop4;

  public static void Main()
  {
     Child aChild = new Child();
     Parent aParent = new Parent();
     aParent = aChild;// is perfectly valid.
     aChild = aParent;// is not valid. Why??

  }
}

为什么此陈述无效?

 aChild = aParent;// is not valid. Why??

因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。


问题答案:

正是因为aChild是aParent功能的超集。你可以写:

class Fox : Animal

因为每只狐狸都是动物。但是另一种方法并不总是正确的(并非每个动物都是狐狸)。

同样,您似乎混合了OOP。这不是父子关系,因为不涉及构图/树。这是祖先/后代继承关系。

继承是“类型的”而不是“包含”的。因此,它是 狐狸,是动物的一种 ,在您的情况下,听起来不对-“孩子是父母的一种”?类的命名是造成混乱的根源;)。

class Animal {}
class Fox : Animal {}
class Fish : Animal {}

Animal a = new Fox(); // ok!
Animal b = new Fish(); // ok!
Fox f = b; // obviously no!


 类似资料:
  • 既然这个对象(在标题中说明)可以调用子类中的重写方法,为什么它不能调用子类的其他方法?我需要尽可能详细的回答,比如内存组织,JVM中的内部逻辑等。 下面的代码会让你清楚地理解我的问题。

  • 考虑类家长: 和类儿童: 如果我在应用程序中创建一个新的子对象,并将其放入父对象的children字段中,然后持久化父对象,为什么Hibernate不自动更新子对象的Parent字段(以便设置parentID列)?

  • 问题内容: Java中的以下代码在elipse上运行时,即使我们将其替换,也会提供相同的输出 与, 请注意,我们已经覆盖了方法。 输出为: 码: 请指出,用这两种方式创建子类对象有什么区别。并且访问方法和变量是否有任何区别?(我们的Java老师说,两种情况下访问方法和变量都不同) 同样,静态方法(例如main)会发生什么。艰难的我知道它是可继承的,但是有人可以在子类中突出它的行为吗? 问题答案:

  • 问题内容: 我从事Java编程已有2年了,显然我遇到了一个问题,无法再次理解和区分类,引用和对象(我不明白为什么我忘记了这些概念)。 让我们来解决这个问题,尽管我已经知道对象是什么,但是我不确定类或引用是否相同。 有人可以很好地理解并且完整地区分什么是类,引用和对象吗? 我所知道的是,该类更像是对象的模板(房屋的蓝图,其中类是蓝图,而房屋是一个对象)。 问题答案: 如果你喜欢隐喻: 一堂课就像一所

  • 我在学习Java,同时试图理解继承。我不明白为什么子类walk()中重写的方法执行了,而另一个xyz()方法却没有执行。 我的问题是,如果下面的方法调用工作正常,并调用士兵方法walk,

  • 我最近一直在翻阅几本书,以便自学Java幸运的是,主要是由于运气,我遇到的困难很少。这种情况刚刚改变。 我在继承和整个超类子类设置下阅读了下面的一节 --创建新的超类对象时,与所有对象一样,会为其指定一个引用(本例中为superReference) --如果创建了一个新的子类对象(定义子类扩展了超类),然后superReference引用被设置为引用该对象而不是原始对象,我的理解是,由于引用是针对