11、接口(interface)
引入:笼统类是从多个类中笼统出来的模板,若要将这类笼统举行得更完全,就得用到一种特别的“笼统类”→ 接口;
例子:
生活中听说过的USB接口实在并非我们所看到的那些插槽,而是那些插槽所遵照的一种范例;而我们看到的那些插槽是依据USB范例设想出来的实例罢了,也就说插槽是USB的实例;
对应差别型号的USB装备而言,他们各自的USB插槽都须要遵照一个范例,恪守这个范例就可以保证插进去插槽的装备能与主板一般通讯;
关于同一种型号的主板上的多个USB插槽,他们有雷同的数据交换体式格局,雷同的完成细节,可以为他们都是同一个类的差别实例
我的总结:
接口只定义了类应该遵照的范例,却不体贴这些类的内部数据和其要领内的完成细节.
接口只划定了这些类里必需供应的要领;从而分离了范例和完成.增强了体系的可拓展性和保护性;
运用接口的优点,拓展性,保护性更好,所以我们在开辟中会常常用到接口.(相当于定义了一种规范)
interface定义
接口定义一种范例,划定一个类必需做什么,但它不论怎样详细去做;
[润饰符] interface 接口名 extends 父接口1,父接口2....
没有组织要领,不能实例化;
接口只能继续接口,不能继续类
接口里没有一般要领,要领满是笼统的;
接口里的要领默许润饰符是public abstract;
接口里的字段满是全局常量,默许润饰符是public static final;
接口里的成员包括(主假如前两个):
全局常量
大众的笼统要领
内部类(包括内部类,内部接口,内部罗列类);
我的总结:
接口没有组织要领,不能实例化!
接口里的要领悉数是笼统的,没有一般要领,有默许的润饰符 public abstract,必需悉数覆写!
12、接口的运用
花样:public class SubImpl extends Super implements IA,IB
接口可以多继续,然则只能继续接口,不能继续类。
完成接口(支撑多完成)
[润饰符] class 类名 implements 接口1,接口2...
接口的完成必需在 extends 以后;
完成接口的要领必需是 public 范例
接口与类之间的关联:
完成关联或许说是继续关联.
可以说类完成了接口的要领,也可以说类继续了接口的要领,差别状况下差别的明白!
13、面向接口编程之制订规范和简朴工场形式
制订一个规范,让别人去完成或许说满足它!
Eg: interface USB{//定义USB规范 void useUSB();//USB有运用USB的行动 }
简朴工场形式
构建一个工场出来,在里面举行生产,用的时刻直接拿
我的总结:
优点:屏障差别子类完成的差别,进步代码的可拓展性和可保护性;
package reviewDemo; //简朴工场形式 interface Phone{//制订规范,都要完成send()要领 public void send(); } class Iphone implements Phone{ @Override public void send() { System.out.println("Iphone手机在发短信"); } } class AndroidPhone implements Phone{ @Override public void send() { System.out.println("AndroidPhone手机在发短信"); } } class MyPhone implements Phone{ @Override public void send() { System.out.println("MyPhone手机在发短信"); } } class Factory{ public static void show(String type){//传入参数,依据差别的范例个性化定制 if(type.equals("")){//为空的状况,不必往下实行 System.out.println("对不起,范例为空!,请从新输入!"); return; } Phone p = null; if("Iphone".equals(type)){//推断范例 p = new Iphone(); }else if("AndroidPhone".equals(type)){ p = new AndroidPhone(); }else{ p = new MyPhone(); } p.send(); } } public class FactoryDemo17 { public static void main(String[] args) { new Factory().show("Iphone");//挪用要领 new Factory().show("AndroidPhone"); new Factory().show("MyPhone"); new Factory().show("YourPhone"); new Factory().show(""); } }
输出:
Iphone手机在发短信
AndroidPhone手机在发短信
MyPhone手机在发短信
MyPhone手机在发短信
对不起,范例为空!
14、面向接口编程之适配器形式
运用一个现成的类,然则它的接口不完全相符你的需求,我只想要它个中的一个要领,不想覆写其他的要领。
比方,窗体有变大,变小,封闭的行动,然则我如今只须要封闭行动;
package reviewDemo; //适配器形式:只想用个中的某一个要领,用适配器作为中心的过渡 interface Windows{ void max(); void min(); void close(); } //适配器形式,完成接口一切的要领,然则不写要领体! class AdapterWindows implements Windows{ @Override public void max() { } @Override public void min() { } @Override public void close() { } } class MyWindows extends AdapterWindows{ //覆写父类的要领 public void close(){ System.out.println("这个完成的是封闭功用!"); } } public class Demo17 { public static void main(String[] args) { new MyWindows().close(); } }
接口和笼统类的比较
雷同点:
都位于继续的顶端,用于被其他完成或继续;
都不能实例化;
都包括笼统要领,其子类都必需覆写这些笼统要领;
区分:
笼统类为部份要领供应完成,防止子类反复完成这些要领,供应代码重用性;接口只能包括笼统要领;
一个类只能继续一个直接父类(多是笼统类),却可以完成多个接口;(接口弥补了Java的单继续)
两者的选用:
优先选用接口,只管罕用笼统类;
须要定义子类的行动,又要为子类供应共性功用时才选用笼统类;
总结:接口不能有组织函数,笼统类是可以有组织函数的,
abstract可以定义组织函数(包括带函数的组织函数),由于要保证其子类在建立的时刻可以举行准确的初始化,然则Abstract类不能被实例化。
知识点:假如不可以或许没有建立对象,那末我们必需加上static润饰,不能用对象挪用,就只好用类去挪用。
16、匿名内部类
合适只运用一次的类
不能是笼统类,由于体系在建立匿名内部类的时刻,会马上建立匿名内部类的对象。
匿名内部类不能定义组织器,由于匿名内部类没有类名。
花样: new 父类组织器([实参列表]) 或 接口() { //匿名内部类的类体部份 }
17、罗列类
运用enum声明,默许直接继续了java.lang.Enum类,而不是Object类;
罗列类的对象是牢固的,实例个数有限,不可以再new( ),罗列对象后可以跟()。
罗列元素必需位于罗列类体中的最最先部份,罗列元素后要有分号与其他成员分开。
罗列类的组织要领的权限润饰符默许是private;
一旦罗列对象背面加上{},那末该对象现实是罗列匿名内部类对象;
一切罗列类都供应一个静态的values()要领(返回该罗列类一切对象构成的数组),便于遍历一切罗列对象;
一切罗列类都供应一个静态的valueOf(String name)要领, 返回罗列类中对象名即是 name的对象。
Eg:public enum Color{ RED(), GREEN(){}, BLUE{}; } package reviewDemo; //罗列 enum Color{ Green,Blue,Yellow; @Override public String toString() { String ret = super.toString(); switch (this) { case Green: ret = "绿色"; break; case Blue: ret = "蓝色"; break; case Yellow: ret = "黄色"; break; default: break; } return ret; } } class Personp{ Color c = Color.Blue; void show(){ System.out.println(c); } } public class Demo18 { public static void main(String[] args) { Color []color = Color.values(); for (Color c : color) { System.out.println(c); } new Personp().show(); } }
输出:
绿色
蓝色
黄色
蓝色
罗列类覆写接口笼统要领的两种体式格局:
在罗列类中完成接口的笼统要领;
在罗列匿名内部类中完成接口的笼统要领;
interface I{ void show(); } enum Color implements I{ RED(){ public void show(){ } }, GREEN{ public void show(){ } }, BLUE{ public void show(){ } }; } enum Color implements I{ RED(), GREEN, BLUE; public void show() { } }
总结:罗列不可以new();即便是反射也不可以!
备注:一个类假如没有组织要领,那末一定有相对应的某个要领可以猎取对象!
以上就是关于面向对象的悉数想写讲解了,若有不对的地方请联络纠正。感谢!
更多相干内容请接见ki4网:JAVA视频教程
以上就是java——面向对象细致引见(三)的细致内容,更多请关注ki4网别的相干文章!