我有两个班级。
执行此行时,
Child myChildObj = new Child();
这会创建单独的两个对象(Parent
和Child
)吗?
或者只是一个子对象,其中包含父方法和属性?
更新:我想在CLR中知道它是否在运行时实际创建了一个Parent
对象(无法访问)。
我在tutorialspoint网站上看过以下引用。
派生类继承基类成员变量和成员方法。 因此,应在创建子类之前创建超类对象。您可以在成员初始化列表中给出超类初始化的说明。
我使用以下代码来验证这一点,并且我得到了子对象和父对象的相同的hashCode值。
Console.WriteLine("child object hashcode : "+this.GetHashCode());
Console.WriteLine("base object hashcode : "+base.GetHashCode());
答案 0 :(得分:3)
这将创建Child
类型的单个实例,其中包含两种类型的方法。您可以在创建的实例上调用这些方法。
答案 1 :(得分:2)
Child
是Parent
的子类,因此它继承了它的所有属性。但是当您创建Child
的对象时,您只会获得Child
的对象。没有“第二部分”负责处理与Parent
相关的事情。内存中只存在一个对象。该单个对象的类型为Child
,因此也与Parent
类型兼容。
答案 2 :(得分:1)
所给出的答案都与您从书本中学到的内容一样抽象,我觉得您想知道它的外观是什么。您可以将子实例视为一块内存,如果您实例化一个父对象,只需要添加一些额外的位和部分(子位),就可以得到它。您获得的引用是指向开头的指针,即基类实例。这就是为什么没有人会看到父实例和子实例之间的区别。因为子实例是父实例(附加了子位)。这会在您实例化GrandChild对象时继续,这些对象也会添加一些额外的位。现在你了解了为什么以及何时进行投射以及何时会造成麻烦。
答案 3 :(得分:0)
它只创建一个类“Child”的实例。 “Child”的实例从“Parent”类继承(包括)所有成员。
答案 4 :(得分:0)
只创建了一个可引用的对象myChildObj
。父类用作模板,但最终未实例化。该对象将包含Parent类的所有成员变量和方法以及其自己的类中的变量和方法。
也可以使用多态来创建对象:
Parent obj = new Child();