日期:2014-05-19  浏览次数:20830 次

解决一个基础问题
接口和抽象类有什么不同?
他们各自有什么作用,谢谢帮忙回答下~

------解决方案--------------------
转贴:
1. Interface, "like a "关系; abstract class, "is a "关系

2. Interface是一种契约, abstract class是事物本质的抽象概括

由以上两点, 什么时候用Interface什么时候用abstract class有看你如何理解你的设计对象, 例如, 某一天你可能会要设计一个Door的类, 它有Open和Close两个功能, 于是

public interface Door
{
void Open();
void Close();
}

public abstract class Door
{
void Open(){};
void Close(){};
}

就目前来说, 你用Interface还是用abstract class基本上没什么区别, 两者都用来描述Door的行为, 只不过用Interface是在强调Door额外的有Open和Close这两个功能, 而用abstract class则是在强调Door自带有Open和Close的能力

走远一点, 假如又有一天, 你要写一个AlarmDoor的类, 这个时候...

public interface AlarmDoor
{
void open();
void close();
void alarm();
}

public abstract class AlarmDoor
{
void open(){};
void close(){};
void alarm(){};
}

现在, 你应该想清楚你究竟是想设计一个报警器还是想设计一扇门, 如果选择Interface, 那你是在想设计一个报警器, 如果选择abstract class, 那你是在想设计一扇门, 说到现在, 是否有点眉目了?

C#里面不允许多个父类, 但却允许多个接口, 接口无非是让某个类拥有某种行为, 而抽象类却是在让某个类拥有某种本质, 因此, 我们设计的类, 应该用一个抽象类把它的所有本质都抽象出来, 而它的一些行为(或者说是契约)则通过Interface来实现, 这也能说明为什么C#会不允许多层父类却允许多层接口