面试题答案
一键面试C# 中类继承的语法和特点
- 语法:在 C# 中,使用
:
符号来表示一个类继承自另一个类。例如:
class ParentClass
{
// 父类成员
}
class ChildClass : ParentClass
{
// 子类成员,可包含新成员或重写父类成员
}
- 特点:
- 代码复用:子类可以继承父类的非私有成员,从而避免重复编写相同的代码。
- 层次结构:形成一种层次结构,子类拥有父类的特性,并可以在此基础上进行扩展。
- 单一继承:C# 中类只支持单一继承,即一个子类只能有一个直接父类,这有助于避免多重继承带来的复杂性和菱形继承问题。
虚方法(virtual method)和重写(override)在实现多态性中的作用
- 虚方法:在父类中使用
virtual
关键字修饰的方法,表明该方法可以在子类中被重写。虚方法为子类提供了一种在保持方法签名一致的情况下,改变方法实现的机制。 - 重写:子类使用
override
关键字来重写父类的虚方法。通过重写,子类可以提供适合自身需求的具体实现,从而实现多态性。多态性允许在运行时根据对象的实际类型来决定调用哪个版本的方法,而不是在编译时就确定。
代码示例展示如何在继承体系中正确运用虚方法和重写来实现运行时多态
using System;
class Shape
{
// 虚方法
public virtual void Draw()
{
Console.WriteLine("绘制一个形状");
}
}
class Circle : Shape
{
// 重写虚方法
public override void Draw()
{
Console.WriteLine("绘制一个圆形");
}
}
class Rectangle : Shape
{
// 重写虚方法
public override void Draw()
{
Console.WriteLine("绘制一个矩形");
}
}
class Program
{
static void Main()
{
Shape[] shapes = new Shape[] { new Circle(), new Rectangle() };
foreach (Shape shape in shapes)
{
shape.Draw();
}
}
}
在上述代码中:
Shape
类定义了一个虚方法Draw
。Circle
和Rectangle
类继承自Shape
类,并分别重写了Draw
方法,提供了各自的实现。- 在
Main
方法中,创建了一个Shape
类型的数组,数组元素实际是Circle
和Rectangle
类型的对象。当遍历数组并调用Draw
方法时,根据对象的实际类型(运行时确定),调用相应子类重写后的Draw
方法,从而实现了运行时多态。