C# 【OOP(面向对象编程)教程】:第七章:接口与抽象类

1. 接口的定义与实现

接口(Interface)是一个抽象类型,定义了一组方法和属性的契约(规范),但不包含任何实现。类或结构可以实现一个或多个接口。

  • 接口的定义

    public interface IFlyable {
        void Fly();
    }
    
  • 实现接口

    public class Bird : IFlyable {
        public void Fly() {
            Console.WriteLine("Bird is flying.");
        }
    }
    
    public class Airplane : IFlyable {
        public void Fly() {
            Console.WriteLine("Airplane is flying.");
        }
    }
    
  • 使用接口

    IFlyable bird = new Bird();
    bird.Fly(); // 输出:Bird is flying.
    
    IFlyable airplane = new Airplane();
    airplane.Fly(); // 输出:Airplane is flying.
    

在这个例子中,IFlyable 接口定义了一个 Fly 方法,BirdAirplane 类实现了该接口并提供了具体实现。

2. 抽象类与抽象方法

抽象类是一个不能被实例化的类,包含至少一个抽象方法(不包含方法体)。抽象类可以包含字段、属性和已实现的方法。

  • 抽象类的定义

    public abstract class Animal {
        public string Name { get; set; }
    
        // 抽象方法
        public abstract void MakeSound();
    }
    
  • 派生类实现抽象方法

    public class Dog : Animal {
        public override void MakeSound() {
            Console.WriteLine("Dog barks.");
        }
    }
    
    public class Cat : Animal {
        public override void MakeSound() {
            Console.WriteLine("Cat meows.");
        }
    }
    
  • 使用抽象类

    Animal dog = new Dog();
    dog.MakeSound(); // 输出:Dog barks.
    
    Animal cat = new Cat();
    cat.MakeSound(); // 输出:Cat meows.
    

在这个例子中,Animal 是一个抽象类,定义了一个抽象方法 MakeSoundDogCat 类继承自 Animal 并实现了 MakeSound 方法。

3. 接口与抽象类的区别
  • 目的

    • 接口:定义一组契约,任何实现接口的类都必须实现这些契约。接口更注重行为。
    • 抽象类:用于描述具有共同行为和状态的一组对象。抽象类更注重对象的共有特性。
  • 实现

    • 接口:类可以实现多个接口。
    • 抽象类:类只能继承一个抽象类(因为 C# 不支持多重继承)。
  • 成员

    • 接口:只包含方法、属性、事件和索引器的声明,不包含实现。
    • 抽象类:可以包含字段、已实现的方法、属性、构造函数等。
  • 适用场景

    • 接口:当需要定义一组行为并希望不同的类以不同方式实现这些行为时。
    • 抽象类:当具有相似特性的类共享某些方法或状态,并希望提供部分实现时。
  • 示例代码对比

    接口示例

    public interface IDrawable {
        void Draw();
    }
    
    public class Circle : IDrawable {
        public void Draw() {
            Console.WriteLine("Drawing a circle.");
        }
    }
    
    public class Square : IDrawable {
        public void Draw() {
            Console.WriteLine("Drawing a square.");
        }
    }
    

    抽象类示例

    public abstract class Shape {
        public string Color { get; set; }
    
        public abstract void Draw();
    }
    
    public class Circle : Shape {
        public override void Draw() {
            Console.WriteLine("Drawing a circle.");
        }
    }
    
    public class Square : Shape {
        public override void Draw() {
            Console.WriteLine("Drawing a square.");
        }
    }
    

总结

  • 接口的定义与实现:接口定义了行为的契约,类通过实现接口来提供具体的行为。
  • 抽象类与抽象方法:抽象类定义了对象的共同特性和行为,派生类实现抽象类中的抽象方法。
  • 接口与抽象类的区别:接口注重行为的契约,可以多重实现;抽象类注重对象的共同特性,只能单一继承。
  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风不归Alkaid

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值