接口概念和作用
接口语法
interface接口名{//静态常量,抽象方法}
说明:声明一个接口使用关键字interface,而不是class,class是用来声明一个类,class和interface是属于同一个级别的。
接口里面存放的内容只能是静态常量、抽象方法,其它带方法体的方法或普通的属性都不能放到接口里面。
接口不能实例化。
接口的特点
接口中只能放静态常量、抽象方法。
java接口是对功能的扩展。
通过实现接口,java类可以实现多实现。
一个类只能继承一个父类,即extends关键字后面只能跟一个父类,但可以通过implements关键字实现,多个接口。
接口与接口之间可以通过extends关键字来产生继承关系。
接口与抽象类的区别
抽象类与实现类之间是一种继承关系,也就是说如果采用抽象类的方式,则父类与子类在概念上应该是相同的。
接口和实现类在概念上不要求相同,接口只是抽取相互之间没有关系的类的共同特征,而不去关注类之间的关系,它可以使没有层次关系的类具有相同的行为。
抽象类是对一组具有相同属性和行为的逻辑上有关系的事物的一种抽象,而接口是对一组具有相同属性和行为的逻辑上不相关的事物的一种抽象。
对于接口和抽象类的选择,反映出设计人员看待问题的不同角度。抽象类用于一组相关的事物,表示的是'is-a'的关系,而接口用于一组不相关的事物,表示的是'like-a'的关系。
抽象类实例:
publicclassAbstractDemo{publicstaticvoidmain(String[]args){Childchild=newChild();chilfeed();Dogdog=newDog();dofeed();}}
@Overridepublicvoidfeed(){Systeout.println('吃米饭');}}
@Overridepublicvoidfeed(){Systeout.println('啃骨头');}}
//接口中只能放公有的静态常量和抽象方法
publicstaticfinalintnumber=1;(就算你直接定义成intnumber=1这样,在这里不写publicstaticfinal,程序在编译时也会自动加上,默认是有的,而且它们的顺序可以互换,颠倒。一般推荐写全。接口中的静态常量或抽象方法的访问方式:接口名.变量名(抽象方法名))。
//抽象方法在这里同静态常量一样,publicabstract可以不写,编译时系统会自动加上,而且这里的访问修饰符只能是public,因为接口是一种能力,我要让它的实现类去实现,假设是private,那么写这个方法又有何意义呢?
publicclassPersonDemo{publicstaticvoidmain(String[]args){Catcat=newCat();Childchild=newChild();feed(chil;feed(cat);}//接口的引用变量可以引用其实现类的对象,即接口实现了多态。publicstaticvoidfeed(IAbilityiAbility){iAbility.eat();}}
@Overridepublicvoideat(){Systeout.println('吃鱼肉');}}
@Overridepublicvoideat(){Systeout.println('吃火锅');}}
面向接口编程
开发系统时,主体架构使用接口,接口构成系统的骨架,这样就可以通过更换接口的实现类来更换系统的实现。
publicclassInterfaceOrientedDemo{publicstaticvoidmain(String[]args){ACorpAdvertisementaCorpAdvertisement=newACorpAdvertisement();BCorpAdvertisementbCorpAdvertisement=newBCorpAdvertisement();AdvertisementBoardadvertisementBoard=newAdvertisementBoard();advertisementBoarshow(aCorpAdvertisement);advertisementBoarshow(bCorpAdvertisement);}}
interfaceAdvertisement{//广告词publicabstractvoidshowAdvertisement();//公司名publicabstractStringgetCorpName();}
文章为作者独立观点,不代表股票自动交易程序化数据接口观点