对于接口和抽象类,大大的提高面向对象的功能。
这里总结一下抽象类和接口。
1、抽象类
在面向对象的概念中,我们知道全部的对象都是通过类来描绘的,可是,并非全部的类都是用来描绘对象的,假设一个类中没有包括足够的信息来描绘一个详细的对象。这种类就是抽象类。
抽象类往往用来表征我们在对问题领域(从对象抽象出来的类)进行分析、设计中得出的抽象概念。是对一系列看上去不同,可是本质上同样的详细概念的抽象。
比方:在大话中举了一个动物參加叫声比赛的:有很多猪狗猫………..等等对象,要进行參加比赛这时候。假设使用面向对象来进行编程的话,那么 我们就能够抽出猪狗猫…...的类,来进行实例化对象。相同这些类中也有非常多的相识的地方,比方当中都有叫声这种方法,名字这个属性等等,为了降低代码的反复性。这时候,我们能够再在这些类中把反复的地方抽出来。这就是抽象类了。
如:abstract class Animal
{
Protected abstract string getShoutSound();//这是抽象方法,抽象方法没有方法体,直接在括号后面加入";"
}
抽象方法,应该必须在详细的类中进行重写。
不然抽象类就没有意义。比方叫声这种方法,要在详细的猪狗猫的类中进行不同的实现。还有抽象方法必须为public或者protected(由于假设为private,则不能被子类继承,子类便无法实现该方法)。缺省情况下默觉得public。
抽象类代表的是一种抽象的概念。根本目的是用来继承的。
详细类不是用来继承的。
抽象类和普通类的差别:
①抽象类不能够实例化。就像动物这个抽象类,在实际生活中没有详细的对象与之相应,所以抽象类的实例化是没有意义的。②抽象方法必须被子类重写。
不然抽象方法的存在就没有意义了。
③含有抽象方法的类必需要定义为抽象类。不论当中是否包括一些其它的方法。
包括抽象方法的类称为抽象类,但并不意味着抽象类中仅仅能有抽象方法。它和普通类一样,相同能够拥有成员变量和普通的成员方法。
2、接口
接口是从对象中抽象出来的特殊的方法,仅仅有部分的详细的类具有。就是不同类的对象具有同样的特殊方法,这时候能够将方法抽象为接口。
语法:
接口中的方法和属性前面不能有修饰符而且接口中全部的方法不能有详细的实现,也就是说,接口中的方法必须都是抽象方法。从这里能够隐约看出接口和抽象类的差别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,而且普通情况下不在接口中定义变量。
实现接口,事实上也是一种多态的方法。
完毕了不同对象根本不可能完毕的任务。当进行“变出东西的方法”假设是叮当就用万能口袋。假设是孙悟空就使用七十二变。
接口定义:interface change
{
String ChangeThing(string thing);
}
同意一个类遵循多个特定的接口。假设一个非抽象类遵循了某个接口,就必须实现该接口中的全部方法。对于遵循某个接口的抽象类。能够不实现该接口中的抽象方法。
实现接口的类就必需要实现接口中的全部的方法和属性。一个类能够支持多个接口。多个类也能够支持同样的接口。
3、抽象类和接口的差别
代码实现:
1、抽象类能够给出一些成员的实现,而接口却不包括成员的实现。所以接口是比抽象类更加抽象的行为。
2、抽象类的抽象成员可被子类部分实现,接口的成员须要实现类全然实现。
3、一个类仅仅能继承一个抽象类,可是能够实现多个接口。
定义:
①设计层面不同
抽象类作为非常多子类的父类,它是一种模板式设计。假设发如今猪狗猫。这些动物毛掉了仍然能够生长。这种方法没有在写出,那么这时候能够再抽象类中进行加入方法,并给出实现。子类中的代码能够不进行更改。
而接口是一种行为规范。
是从多个不同对象中抽象出来的共同的方法。假设在抽象出第二个方法,那么实现接口的类须要又一次实现接口。
②抽象层面:
类是对对象的抽象,抽象类是对类(一些相识的类的对象)的总体(字段。属性,方法)的抽象,接口是对类的局部的行为(行为跨越了不同类的对象)进行抽象。
从设计的角度讲,抽象类是从子类中发现公共的东西,泛化出父类,是重构的结果。
而接口是根本不知道子类的存在,预先进行定义的,是设计的结果。
比方:猫狗,都是动物有非常多相识的地方。所以能够让他们继承动物这个抽象类。
而飞机,麻雀,超人,是全然不相关的类。他们由都会飞,所以这时候能够让他们来实现同样的接口。
总是不论是接口,抽象类,类,甚至是对象,都是在不同层次,不同角度的进行抽象的结果,共性就是抽象。
4、为什么
至于使用接口和抽象类的优点是什么。目的是解耦。将业务和实现分离开。对于这一块的理解还不是非常深刻,接下来有新的认识在放到这里。