VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#编程 >
  • 抽象类(Abstract Class):部分实现

抽象类(Abstract Class):部分实现

  1. 抽象类的核心定义
    抽象类是一种不能实例化的类,用于定义基类的通用行为vb.net教程C#教程python教程SQL教程access 2010教程和规范子类的必须实现的行为。它结合了:
    具体方法:子类可直接复用的通用逻辑;
    抽象方法:子类必须实现的个性化逻辑(无方法体)。
    核心价值:
    代码复用:共享通用逻辑(如动物的睡觉行为);
    行为规范:强制子类实现特定行为(如动物的发声方式);
    层次结构:构建类的继承树(如Animal→Dog→Poodle)。
    语法规则:
    用abstract关键字修饰类;
    抽象方法用abstract修饰,无方法体;
    子类必须实现所有抽象方法(否则子类也需为抽象类)。
  2. 实例:动物抽象类的实现
    以动物行为为例,定义抽象基类Animal,包含通用属性(名字)、具体方法(睡觉)和抽象方法(发声、移动),再让Dog、Bird子类实现抽象方法。
    2.1 完整代码实现
    csharp
	using System;
	
	// 1. 抽象基类:Animal
	public abstract class Animal
	{
	// 通用属性:名字
	public string Name { get; set; }
	
	// 构造函数:初始化名字
	public Animal(string name)
	{
	Name = name;
	}
	
	// 抽象方法:发声(子类必须实现)
	public abstract void MakeSound();
	
	// 抽象方法:移动(子类必须实现)
	public abstract void Move();
	
	// 具体方法:睡觉(子类可直接复用)
	public void Sleep()
	{
	Console.WriteLine($"{Name}正在睡觉...");
	}
	}
	
	// 2. 子类:Dog(继承Animal)
	public class Dog : Animal
	{
	// 调用父类构造函数
	public Dog(string name) : base(name) { }
	
	// 实现抽象方法:发声
	public override void MakeSound()
	{
	Console.WriteLine($"{Name}汪汪叫!");
	}
	
	// 实现抽象方法:移动
	public override void Move()
	{
	Console.WriteLine($"{Name}用四条腿跑!");
	}
	}
	
	// 3. 子类:Bird(继承Animal)
	public class Bird : Animal
	{
	public Bird(string name) : base(name) { }
	
	public override void MakeSound()
	{
	Console.WriteLine($"{Name}叽叽喳喳叫!");
	}
	
	public override void Move()
	{
	Console.WriteLine($"{Name}扇动翅膀飞!");
	}
	}
	
	// 4. 测试类
	class Program
	{
	static void Main()
	{
	// 抽象类不能实例化:Animal animal = new Animal("动物"); // 编译错误
	Animal dog = new Dog("旺财");
	Animal bird = new Bird("小麻雀");
	
	dog.MakeSound(); // 调用Dog的实现
	dog.Move(); // 调用Dog的实现
	dog.Sleep(); // 调用父类的具体方法
	
	bird.MakeSound();// 调用Bird的实现
	bird.Move(); // 调用Bird的实现
	bird.Sleep(); // 调用父类的具体方法
	}
	}

2.2 逐行代码讲解

抽象类Animal:

oabstract class Animal:标记为抽象类,不能实例化;
opublic abstract void MakeSound():抽象方法,无方法体,子类必须实现;
opublic void Sleep():具体方法,有完整实现,子类可直接调用。

子类Dog:

oclass Dog : Animal:继承抽象类,必须实现所有抽象方法;
obase(name):调用父类构造函数初始化Name属性;
ooverride void MakeSound():用override关键字实现抽象方法。

测试逻辑:

oAnimal dog = new Dog("旺财"):父类引用指向子类实例(多态特性);
odog.MakeSound():执行子类Dog的实现;
odog.Sleep():执行父类Animal的具体方法。
输出结果:

	旺财汪汪叫! 
	旺财用四条腿跑! 
	旺财正在睡觉... 
	小麻雀叽叽喳喳叫! 
	小麻雀扇动翅膀飞! 
	小麻雀正在睡觉...
  1. 基础知识拓展
    3.1 抽象类vs接口:核心区别
特性 抽象类(Abstract Class) 接口(Interface)
继承限制 子类只能继承一个抽象类 子类可实现多个接口
成员类型 可包含字段、属性、构造函数、具体方法、抽象方法 仅包含方法、属性、事件、索引器(无字段/构造)
实现方式 子类需实现所有抽象方法(否则子类为抽象类) 子类需实现所有接口成员
核心用途 共享通用逻辑+规范行为(How to do + What to do) 仅规范行为(What to do)
实例化 不能实例化 不能实例化

3.2 抽象方法vs虚方法

特性 抽象方法(Abstract Method) 虚方法(Virtual Method)
方法体 无方法体 有方法体(默认实现)
类要求 只能在抽象类中定义 可在普通类/抽象类中定义
子类处理 必须重写(override) 可选重写(override)或隐藏(new)

3.3 抽象类的使用场景
共享通用逻辑:当多个子类有共同的代码(如Sleep()),可放在抽象类中;
规范子类行为:当子类必须实现特定行为(如MakeSound()),用抽象方法强制;
构建继承层次:当需要定义类的层次结构(如Animal→Mammal→Dog),抽象类是中间层。
3.4 抽象类的构造函数
抽象类可以有构造函数,用于初始化基类的字段/属性;
子类必须通过base()调用父类构造函数;
抽象类的构造函数不能直接调用(因不能实例化)。
4. 总结
抽象类是C#中代码复用与行为规范的结合体:
核心作用:定义基类通用逻辑,强制子类实现个性化行为;
关键语法:abstract修饰类/方法,子类用override实现抽象方法;
使用场景:适合有共同逻辑且需要规范子类行为的场景(如动物、形状、交通工具)。
练习
实现抽象类Shape,包含抽象方法CalculateArea()和CalculatePerimeter(),然后子类Circle和Rectangle实现这些方法。
提示:
Circle需属性Radius;
Rectangle需属性Width和Height;
面积公式:圆=πr²,矩形=宽×高;
周长公式:圆=2πr,矩形=2×(宽+高)。
示例代码框架:
csharp

	public abstract class Shape
	{
	public abstract double CalculateArea();
	public abstract double CalculatePerimeter();
	}
	
	public class Circle : Shape
	{
	public double Radius { get; set; }
	public Circle(double radius) { Radius = radius; }
	// 实现抽象方法...
	}
	
	// Rectangle类同理...

本站原创,转载请注明出处:https://www.xin3721.com/ArticlecSharp/c49370.html


相关教程