目录
抽象方法
1,抽象方法的定义,
2,抽象方法的特性
3,实例
接口
1,接口的定义
2,实现接口
3,接口实例
4,接口的特点
5,多接口实现
接口和抽象类的比较
抽象方法
抽象方法是指在抽象类中声明的方法,他没有方法体,而是让派生类来提供具体的实现, 抽象方法通过abstrtact关键字来声明,抽象类方法的主要目的是强制派生类必须实现 该方法,抽象方法所在的类称为抽象类
1,抽象方法的定义,
它的声明形式如下:
public abstract 返回类型 MethodName(参数列表);
2,抽象方法的特性
(1)没有方法体
(2)必须被重写,抽象方法必须在派生类中实现(override关键字)
(3)只能在抽象类中声明,抽象方法只能出现在抽象类中,不能在普通类声明
3,实例
using System;// 定义一个抽象类
public abstract class Animal
{// 抽象方法,派生类必须实现public abstract void MakeSound();// 已实现的方法public void Sleep(){Console.WriteLine("This animal is sleeping.");}}// 派生类 Dog 必须实现 MakeSound 方法
public class Dog : Animal
{// 重写抽象方法public override void MakeSound(){Console.WriteLine("Woof! Woof!");}}// 派生类 Cat 必须实现 MakeSound 方法
public class Cat : Animal
{// 重写抽象方法public override void MakeSound(){Console.WriteLine("Meow!");}}class Program
{static void Main(){// Animal 是抽象类,不能实例化// Animal animal = new Animal(); // 错误!// 创建 Dog 和 Cat 对象Animal myDog = new Dog();myDog.MakeSound(); // 输出:Woof! Woof!myDog.Sleep(); // 输出:This animal is sleeping.Animal myCat = new Cat();myCat.MakeSound(); // 输出:Meow!myCat.Sleep(); // 输出:This animal is sleeping.}}
接口
接口与抽象方法类似,也是只声明方法名,让派生类实现具体内容
1,接口的定义
接口通过interface关键字来定义,接口中可以声明方法,属性,事件等成员
例:
public interface IMyInterface
{
// 方法声明
void MyMethod();
// 属性声明
int MyProperty { get; set; }
// 事件声明
event EventHandler MyEvent;
}
2,实现接口
接口在被派生类继承后,派生类必须要提供接口中声明的所有方法和属性的实现
例:
public class MyClass : IMyInterface
{
// 实现接口方法
public void MyMethod()
{
Console.WriteLine("Method implemented.");
}
// 实现接口属性
public int MyProperty { get; set; }
// 实现接口事件
public event EventHandler MyEvent;
}
3,接口实例
using System;// 定义一个接口
public interface IAnimal
{// 接口中的方法void MakeSound();// 接口中的属性string Name { get; set; }// 接口中的事件event EventHandler OnSoundMade;}// 实现接口的类
public class Dog : IAnimal
{// 属性的实现public string Name { get; set; }// 方法的实现public void MakeSound(){Console.WriteLine($"{Name} says Woof!");OnSoundMade?.Invoke(this, EventArgs.Empty); // 触发事件}// 事件的实现public event EventHandler OnSoundMade;}// 主程序
public class Program
{public static void Main(){IAnimal myDog = new Dog { Name = "Buddy" };// 订阅事件myDog.OnSoundMade += (sender, e) =>{Console.WriteLine("A sound was made!");};// 调用方法myDog.MakeSound();}}
输出:
Buddy says Woof!
A sound was made!
4,接口的特点
(1)没有实现
(2)多重实现,一个类可以继承多个接口
(3)接口不包含字段和构造函数
(4)支持事件,接口中可以声明事件
(5)接口中的成员只能用public修饰符,不能有其他访问修饰符
5,多接口实现
例:
public interface IWalkable
{void Walk();}public interface ISwimmable
{void Swim();}public class Animal : IWalkable, ISwimmable
{public void Walk(){Console.WriteLine("Walking...");}public void Swim(){Console.WriteLine("Swimming...");}}class Program
{static void Main(){Animal animal = new Animal();animal.Walk(); // 输出:Walking...animal.Swim(); // 输出:Swimming...}}
接口和抽象类的比较
特性 | 接口 | 抽象类 |
成员定义 | 只能包含方法、属性、事件等的声明,不能包含字段 | 可以包含方法声明、字段、构造函数、属性等 |
多重继承 | 支持一个类实现多个接口 | 不支持多重继承,一个类只能继承一个抽象类 |
成员实现 | 成员只能由实现接口的类提供实现 | 可以提供部分实现(抽象方法不提供实现) |
访问修饰符 | 所有成员默认是 public | 可以指定访问修饰符(如 private, protected) |