抽象类和接口
抽象类
abstract 修饰
抽象类是一种比较特殊的类
特殊性:
1 不能被实例化
2 抽象类可包含抽象方法和属性,也可以包含非抽象的成员,但抽象方法一定存在于抽象类中
3 抽象基类的方法的抽象成员必须在具体派生类中重写(override)
4 抽象类满足类的单一继承和继承传递性
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public abstract class Animal 2 { 3 public void Eat() 4 { 5 Console.WriteLine("吃饭"); 6 } 7 8 public abstract void Run(); 9 } 10 11 public class Dog:Animal 12 { 13 public override void Run() 14 { 15 Console.WriteLine("跑"); 16 } 17 }
关于抽象类为什么不能实例化
抽象类除了不能实例化和普通的类没有区别,抽象类可以有构造方法,举例说明抽象类Person,人
类有男有女,有年龄等特征,有吃饭等方法,抽象类实例化时属性或方法没有具体的化,实例化人
类对象不知男女,没有年龄或其他信息是未知的。抽象类更多的是用于定义公用的方法以供继承。
接口Interface
接口是一种规范,表示一种能力功能,形式I开头,able结尾
特殊性:
1 接口不能实例化
2 接口中的方法默认是抽象的,默认是public的,不需要abstract修饰
3 实现接口的具体类必须重写接口的成员,且不需要override关键字
4 接口只能包含方法,属性,索引器和事件
5 接口可继承多个接口,类可以实现多个接口
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
interface IFlyable { string Tool { get; set; } } public class Bird:IFlyable { public string Tool { get; set; } public void Fly() { Console.WriteLine("鸟用{0}飞",this.Tool); } }