链接: 源码
在C#中,抽象类和抽象方法都是面向对象编程(OOP)的重要概念,用于创建具有通用行为的类,同时允许派生类实现特定的细节。
-
抽象类中可以有抽象方法,也可以没有抽象方法;
-
抽象方法只能存在抽象类中,不能存在普通类中
抽象类(Abstract Class)
抽象类是一个特殊的类,它不能被实例化。抽象类的主要目的是作为其他类的基类,为派生类提供一个通用的模板。抽象类可以包含抽象方法和非抽象方法。
抽象类使用abstract
关键字来声明。例如:
public abstract class Animal
{
public abstract void MakeSound(); // 抽象方法
public void Move() // 非抽象方法
{
Console.WriteLine("The animal moves.");
}
}
在上面的例子中,Animal
是一个抽象类,它有一个抽象方法MakeSound
和一个非抽象方法Move
。
抽象方法(Abstract Method)
抽象方法是一个没有实现的方法,它必须在任何非抽象派生类中被重写。抽象方法使用abstract
关键字声明,并且没有方法体(即没有花括号{}
及其中的内容)。
抽象方法只能存在于抽象类中。例如:
public abstract class Animal
{
public abstract void MakeSound(); // 抽象方法,没有方法体
}
//非抽象类中不能有抽象方法
//public class NonAbstract
//{
// public abstract void display(string text);
//}
任何继承自抽象类的非抽象类都必须提供抽象方法的实现。例如:
public class Dog : Animal
{
public override void MakeSound() // 重写抽象方法
{
Console.WriteLine("The dog barks.");
}
}
在这个例子中,Dog
类继承自Animal
类,并提供了MakeSound
方法的具体实现。注意,使用override
关键字来表示该方法是对基类中抽象方法的重写。
使用抽象类和抽象方法
抽象类和抽象方法的主要用途是创建一个类结构,其中基类定义了一组通用的属性和方法,而派生类则提供这些方法的特定实现。这种方法允许代码重用和灵活性,因为你可以创建多个派生类,每个类都有自己独特的行为,同时共享基类的通用行为。
以下是一个使用抽象类和抽象方法的简单示例:
// 抽象类
public abstract class Shape
{
public abstract double GetArea(); // 抽象方法
}
// 继承自Shape的非抽象类
public class Circle : Shape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
public override double GetArea() // 重写抽象方法
{
return Math.PI * radius * radius;
}
}
// 另一个继承自Shape的非抽象类
public class Rectangle : Shape
{
private double width;
private double height;
public Rectangle(double width, double height)
{
this.width = width;
this.height = height;
}
public override double GetArea() // 重写抽象方法
{
return width * height;
}
}
在这个例子中,Shape
是一个抽象类,它有一个抽象方法GetArea
。Circle
和Rectangle
类都继承自Shape
类,并提供了GetArea
方法的具体实现。这样,你就可以创建Circle
和Rectangle
对象,并调用它们的GetArea
方法来计算面积,而不需要关心它们的具体实现细节。
英语
单词 | 音标 | 解释 | 例句 | 难点单词 | 拓展 |
---|---|---|---|---|---|
Circle | /ˈsɜːkl/ | n. 圆;圈;圆圈;圆形;圈子,阶层,界;圆周;环;圆形物;环状物;弧形楼座 v. (尤指在空中)盘旋,环行,转圈;圈出;圈起;围绕…画圈 记忆 circ 圆,环 + -le 反复,连续 | 1) He has a small circle of friends… 2) you draw a circle above the right answer. | ||
radius | /ˈreɪdiəs/ | n. 半径(长度);桡骨;周围 | We are measuring the radius of the circle. | ||
rectangle | /ˈrektæŋɡl/ | n. 长方形;矩形 记忆 rect- 正,直 + angle n.角 | Suppose the width of a rectangle is x metres. |