C#怎么new父类 拿子类接收 调用子类重写父类的方法 怎样才能输出子类的方法
时间: 2024-09-27 21:10:24 浏览: 31
在C#中,你可以通过以下步骤创建一个父类的对象并让它引用子类实例,从而调用子类重写的方法:
1. 首先,你需要声明一个父类,并定义一个虚方法(virtual method),这是一个可以在子类中被重写的方法。例如:
```csharp
public class ParentClass
{
public virtual void BaseMethod() => Console.WriteLine("这是ParentClass的方法");
}
```
2. 然后,创建一个子类并重写这个方法:
```csharp
public class ChildClass : ParentClass
{
public override void BaseMethod() => Console.WriteLine("这是ChildClass重写了的方法");
}
```
3. 当你在程序中需要一个`ParentClass`类型的变量,但实际操作的是子类实例时,可以这样做:
```csharp
ParentClass parentObject = new ChildClass(); // 使用子类的新建实例
// 调用的是子类的方法,因为它是虚方法
parentObject.BaseMethod();
```
当你运行这段代码时,会输出"这是ChildClass重写了的方法"。
相关问题
c#子类重写父类方法
在C#中,子类可以重写父类的方法,以便子类能够定义自己的行为。要重写父类方法,需要遵循以下几个步骤:
1. 子类必须继承自父类。你可以使用冒号(:)符号来指定子类的基类。
2. 在子类中,创建一个具有相同名称、返回类型和参数的方法。这个方法将会重写父类中的方法。
3. 使用`override`关键字来标记子类中的方法,告诉编译器这是一个重写方法。
4. 在重写方法中,可以使用`base`关键字来调用父类中的原始方法或属性。
下面是一个示例,演示了如何在C#中重写父类的方法:
```csharp
class ParentClass
{
public virtual void Print()
{
Console.WriteLine("Parent");
}
}
class ChildClass : ParentClass
{
public override void Print()
{
Console.WriteLine("Child");
}
}
static void Main(string[] args)
{
ParentClass parent = new ParentClass();
ChildClass child = new ChildClass();
parent.Print(); // 输出 "Parent"
child.Print(); // 输出 "Child"
ParentClass childAsParent = new ChildClass(); // 可以将子类实例赋值给父类引用
childAsParent.Print(); // 输出 "Child",因为重写的方法将在运行时动态绑定到子类实现
}
```
注意,父类中被重写的方法必须使用`virtual`或`abstract`关键字进行标记,以允许子类进行重写。如果没有使用这些关键字,则无法在子类中重写父类方法。
C# 继承 父类调用子类中的方法
在C#中,继承是创建新类的一种机制,允许已存在的类(称为父类或基类)包含另一个类的所有属性和方法。当你从一个类派生出一个新的类时,这个新的类就被称为子类。子类不仅可以继承父类的成员,还可以在其上添加新的特性或覆盖(重写)父类的方法。
当父类引用指向子类的对象时,父类可以调用子类中重写的方法。这是因为C#支持动态绑定(late binding),也称运行时多态。即使调用的是父类类型的引用,实际运行时会根据对象的实际类型来确定调用哪个方法。这就是所谓的“向上转型”(upcasting),允许你在不指定具体子类的情况下访问其公共方法。
例如:
```csharp
public class Animal { // 父类
public void MakeSound() {
Console.WriteLine("Animal makes a sound");
}
}
public class Dog : Animal { // 子类
public override void MakeSound() {
Console.WriteLine("Dog barks");
}
}
// 父类引用调用子类方法
Animal animal = new Dog(); // 动物引用实际上是指向狗对象
animal.MakeSound(); // 输出 "Dog barks"
```
阅读全文