面试题答案
一键面试- 定义和基本特性
- 抽象类:
- 可以包含抽象方法和具体方法。抽象方法只有声明,没有实现,需要子类去实现;具体方法有方法体,可以直接被调用。
- 抽象类不能被实例化,只能被继承。
- 一个类只能继承一个抽象类。
- 接口:
- 只能包含抽象成员(方法、属性、事件、索引器),所有成员默认是
public
和abstract
的,不能有方法体。 - 接口不能包含字段,不能有构造函数。
- 一个类可以实现多个接口。
- 只能包含抽象成员(方法、属性、事件、索引器),所有成员默认是
- 抽象类:
- 多态实现方式
- 抽象类:通过继承抽象类,子类重写抽象类中的抽象方法来实现多态。
- 接口:通过类实现接口,并实现接口中的所有成员来实现多态。
- 代码示例
- 抽象类实现多态:
// 定义抽象类
abstract class Shape
{
// 抽象方法
public abstract double Area();
// 具体方法
public void PrintInfo()
{
Console.WriteLine($"这个形状的面积是: {Area()}");
}
}
// 继承抽象类
class Circle : Shape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
// 重写抽象方法
public override double Area()
{
return Math.PI * radius * radius;
}
}
class Program
{
static void Main()
{
Shape circle = new Circle(5);
circle.PrintInfo();
}
}
- 接口实现多态:
// 定义接口
interface IAreaCalculable
{
double Area();
}
// 实现接口
class Rectangle : IAreaCalculable
{
private double width;
private double height;
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
// 实现接口方法
public double Area()
{
return width * height;
}
}
class Program
{
static void Main()
{
IAreaCalculable rectangle = new Rectangle(4, 5);
Console.WriteLine($"矩形的面积是: {rectangle.Area()}");
}
}
在上述代码中,通过抽象类 Shape
和接口 IAreaCalculable
分别展示了不同的多态实现方式。抽象类 Shape
既可以有抽象方法 Area
供子类重写,也可以有具体方法 PrintInfo
供子类直接使用;而接口 IAreaCalculable
只定义了抽象的 Area
方法,由实现接口的类去具体实现。