今天给大家带来了抽象类与接口、正所谓不懂得抽象的程序员不完全算是程序员
抽象类
一句话抽象类就是类的抽象
打个比方吧、下面有这么几个类 小猫类 小狗类 鸟类 鱼类
这四个类肯定有一些共同的方法、如吃饭、睡觉、打豆豆、额?打豆豆?!打豆豆不算啊!好吧、反正就是有共同点对吧!
那我们就给这四个类抽象一下、抽象出来的类就是动物类、这四个都是动物类的、类是对对象的抽象、而抽象类就是类的抽象、简单的理解就是比类大一级、抽象类只能被继承、因为抽象类没有具体的方法实现、他只是类的一个抽象、实现一个小猫类、喵一只猫出来了、实现一个动物类?哥请教我实例化一只动物……动物只是对大多数生物类的一些共同点的抽象、抽象类- - 、哎呀妈呀‘类’似我了……
抽象类写法
动物类(抽象类)
猫类(继承抽象方法的子类)
全部代码
abstract class 动物
{
protected abstract void 吃饭();
protected abstract void 睡觉();
protected abstract void 打豆豆();
}
class 小猫:动物
{
public override void 吃饭()
{
Console.WriteLine("小猫吃饭");
}
public override void 睡觉()
{
Console.WriteLine("小猫睡觉哦");
}
public override void 吃饭()
{
Console.WriteLine("喵O~哀家不会打豆豆");
}
}
class 小狗 : 动物
{
public override void 吃饭()
{
Console.WriteLine("小狗吃饭");
}
public override void 睡觉()
{
Console.WriteLine("小狗睡觉……旺旺");
}
public override void 吃饭()
{
Console.WriteLine("旺旺O~打豆豆 旺旺");
}
}
//鸟类鱼类代码类似这就不显示了
1.抽象类不能被实例化
抽象类是不能有具体的方法的、他的抽象方法都是子类来实现的、所以抽象方法不能实例化、亲!你想想、实例化一个猫类是只猫、实例化动物类是什么???什么都说不是- -
2 写抽象类必须写抽象方法、一个抽象方法、必须是在抽象类里面的、但是一个抽象类、可以不写抽象方法。
3 不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承
4 继承抽象类的子类要实现抽象类的所有抽象方法
提供一个继承的出发点、当设计一个抽象类时、一定是用来继承的、所以在一个以继承关系形成的等级结构里、树叶应当是具体类、而树枝节点军事抽象类。抽象类
——————————————抽象类就是类的抽象!!!!
接口
接口其实也是类、叫做接口类、接口的里面那是慢慢爱、这些爱就是一些没有具体是实现的方法、接口就是对方法的抽象、接口就是为解决一件具体的事情而生的、那接口里的方法是抽象方法?NO~不是抽象方法、因为他没有abstract 修饰符= =。
认识接口
1 接口类里写了特定的功能、但是不写实现方法、功能的实现由实现接口的子类去完成(接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员)
2 因为接口没有方法的具体实现、没有任何成员的执行方式、所以不能实例化、不能有构造方法和字段、不能有修饰符。
3 接口是用来被子类继承实现的、子类实现接口、必须实现接口的所有方法、属性
4 C#没有多跟继承、通过接口能实现多继承、也就是实现多个接口、一个类可以实现多个接口、一个接口也可以被多个类实现。
5 接口类命名首字母必须是I
说了这几条估计你就迷糊了、其实很简单、咱们看个实例
上面说了小猫不会打豆豆、但是主人一时兴起、教了小猫学会了打豆豆!我们现在加一个打豆豆的接口、让小猫实现打豆豆的功能这样小猫就会打豆豆了、用接口可以规范打豆豆的方法、如果小狗以后也学会了打豆豆、那小狗实现这个接口就好啦、这样就很好的实现了扩展、而没有修改原先的代码、有了接口的规定框架、打豆豆的方法也不会少写、下面就让我们看下小猫是怎么学会- -打豆豆的吧!
具体代码
interface I打豆豆接口//打豆豆的接口
{
string 打豆豆(string thing);//没有具体实现的方法
}
class 小猫 :I打豆豆接口 //小猫类实现打豆豆的接口
{
public string 打豆豆(string thing)//实现接口的方法
{
return "我刚刚学会打豆豆";//具体方法
}
}
…………吃饭、睡觉、打豆豆!
抽象方法与接口的异同点
哎呦!抽象方法和接口太像了、都没具体实现方法、都不能实例化、那我们会搞混的、下面就让大家明白小抽跟小接的相同和不同点 = =那个点啊……
相同点
1 都是面向抽象的
2 都不可以实例化
3 都有无具体实现的方法
4 都可以被继承
不同点
1 抽象类是对对象的抽象、而接口是对方法的抽象
2 抽象类可以给出一些成员的实现、接口却不包含任何成员的实现方法
3 抽象类可以被子类部分实现、接口必须被子类全部实现
4 一个子类只能集成一个抽象类、但是可以实现多个接口
5 从设计角度说、抽象类是从类中抽象公共的东西、泛化出父类、然后让子类继承、接口是不知道子类的存在、方法如何实现不确认、预先定义。
6 接口命名前面必须加 I 而抽象类不用、关键字也不一样。
抽象方法与接口的使用
如果行为跨越不同的类、可以使用接口;对于一些相似的类对象、用继承抽象类
—————————吃饭、睡觉、打豆豆、豆豆?豆豆到底是谁?!———————————
————chenchen————
面向对象基础指数(7)抽象类 接口,布布扣,bubuko.com
原文:http://blog.csdn.net/u010191034/article/details/21292777