抽象类和接口成就了面向抽象编程的设计思想,同时也是实现多台的基础技术之一。
接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法中不能包含任何实现。
抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能密封;如果子类没有实现所有的抽象方法,则该子类也必须声明为抽象类;
abstract public class Animal
{
//定义静态字段
static protected int _id;
//定义属性
public abstract int Id{get;set;}
//定义方法
public abstract void Eat();
}
//实现抽象类
public class Act:Animal
{
public override int Id
{
get{return _id;}
set{_id=value;}
}
///如果此处将该方法予以屏蔽,该类会报错,提示该类不实现继承的抽象方法Eat();如果想解除该错误,有两个方法,一个是继承实现Eat方法,二是将该类标记为抽象类;
public override void Eat()
{
}
}
public interface Testdd
{
//方法
int CompareTo(object o);
//属性
int Test();
//索引器
long this[int index]{get;set;}
}
相同点:
1.都不能直接被实例化,都可以通过继承实现其抽象方法;
2.都是面向抽象编程的技术基础;
不同点:
1.接口支持多继承,抽象类不能实现多继承;
2.接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法;
3.接口可以作用于值类型和引用类型;抽象类只能作用于引用类型;
4.抽象类不能使用new关键字,也不能被密封,因为是抽象类不能被实例化;
5.在抽象方法声明中不能使用static或virtual修饰符;