我对OOP比较陌生,所以想清除一些东西,
我有以下代码
class Parent
{
public Parent()
{
Console.WriteLine("Parent Class constructor");
}
public void Print()
{
Console.WriteLine("Parent->Print()");
}
}
class Child : Parent
{
public Child()
{
Console.WriteLine("Child class constructor");
}
public static void Main()
{
Child ChildObject = new Child();
Parent ParentObject = new Child();
ChildObject.Print();
ParentObject.Print();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Parent Class Constructor
Child Class constructor
Parent Class Constructor
Child Class constructor
Parent->Print()
Parent->Print()
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
1)为什么在使用构造函数实例化对象时调用基类构造ChildClass函数?没有明确指定base关键字.有没有办法避免调用基类构造函数?
2)为什么ParentClass ParentObj = new ChildClass();可能?而不是相反.
一句话,多态性。
通过Child继承Parent,子对象呈现父对象的特征。如果你从遗传学角度思考,它可能更有意义。
1)为什么当我使用ChildClass构造函数实例化对象时,会调用基类构造函数?没有明确指定基本关键字。有什么办法可以避免调用基类构造函数吗?
没有办法绕过被调用的基类构造函数(据我所知)。调用基类构造函数的目的是实例化基类(传递参数、初始化其他对象、赋值等)
2)为什么ParentClass ParentObj = new ChildClass(); 可能的?而不是相反。
由于多态性,Child 看起来像Parent,因此可以实例化为Parent。由于 Parent 不继承 Child,Parent 看起来不像 Child,因此可能不会实例化为Child。
就其价值而言,使用 Parent 和 Child 具有不同的含义。通常,当提到继承时,Parent是 基类 ,其中Child是派生类型或子类型。