抽象类

抽象类就是"半成品模板",它规定了一些必须要做的事情(抽象方法),也提供了一些现成的东西(普通方法)。

————————————————————————————————————————————————————————————————————————————

案例1:动物(强制子类实现叫声)
csharp
abstract class Animal
{
public abstract void Speak(); // 抽象方法:只声明,不实现

public void Sleep() // 普通方法:所有动物共用
{
Console.WriteLine("睡觉中...");
}
}

class Dog : Animal
{
public override void Speak() // 必须实现
{
Console.WriteLine("汪汪");
}
}

class Program
{
static void Main()
{
Dog d = new Dog();
d.Speak(); // 汪汪
d.Sleep(); // 睡觉中...
// Animal a = new Animal(); // 报错!抽象类不能实例化
}
}
Speak必须由子类自己实现,但Sleep所有动物直接用。

——————————————————————————————————————————————————————————————————————————————————

案例2:交通工具(计算时间)
csharp
abstract class Vehicle
{
public abstract double GetSpeed(); // 速度由子类定

public double CalcTime(double distance) // 通用公式
{
return distance / GetSpeed();
}
}

class Car : Vehicle
{
public override double GetSpeed() { return 60; }
}

class Bike : Vehicle
{
public override double GetSpeed() { return 15; }
}

class Program
{
static void Main()
{
Car c = new Car();
Bike b = new Bike();
Console.WriteLine(c.CalcTime(120)); // 2小时
Console.WriteLine(b.CalcTime(120)); // 8小时
}
}
计算时间的逻辑写在父类,子类只需提供各自的速度就行。

——————————————————————————————————————————————————————————————————————————————————

案例3:员工(必须发工资,但算法不同)
csharp
abstract class Employee
{
public abstract int GetSalary(); // 必须实现,但算法不同

public void ShowPay() // 通用方法
{
Console.WriteLine($"本月工资:{GetSalary()}元");
}
}

class FullTime : Employee
{
public override int GetSalary() { return 8000; }
}

class PartTime : Employee
{
private int hours = 80;
public override int GetSalary() { return hours * 50; }
}

class Program
{
static void Main()
{
FullTime f = new FullTime();
PartTime p = new PartTime();
f.ShowPay(); // 本月工资:8000元
p.ShowPay(); // 本月工资:4000元
}
}
GetSalary必须由子类实现(月薪和时薪算法不同),但ShowPay直接复用。

posted @ 2026-08-07 15:27  菜鸟的奋斗军  阅读(3)  评论(0)    收藏  举报