举例java接口通俗理解,java接口开发教程

  举例java接口通俗理解,java接口开发教程

  一.导言二理解三。使用静脉注射。应用程序代理)1模式1。应用场景2。分类三。代码演示五、接口与抽象类VI的比较。经典主题(调试)

  00-1010一方面,有时候需要从几个类中派生出一个子类,继承它们所有的属性和方法。但是,Java不支持多重继承。有了接口,就可以得到多重继承的效果。

  另一方面,有时需要从几个类中提取一些共同的行为特征,但它们之间并没有is-a关系,只是相同的行为特征。比如鼠标、键盘、打印机、扫描仪、相机、充电器、MP3播放器、手机、数码相机、移动硬盘都支持USB连接。

  00-1010接口是一个规范,它定义了一套规则,体现了现实世界中“如果你是/想要……你一定能够……”的思想。继承是“是或否”的关系,而接口实现是“是或否”的关系。

  接口的本质是契约、标准和规范,就像我们的法律一样。制定之后,大家都要遵守。

  00-1010接口由关键字interface定义。

  在Java中,接口和类是并列的,或者接口可以理解为一个特殊的类。本质上,interface是一个特殊的抽象类,只包含常量和方法的定义(JDK7.0之前),不包含变量和方法的实现。

  定义Java类的语法格式:先写扩展,再实现。

  类子类扩展超类实现接口{}接口是抽象方法和常量值定义的集合。

  如何定义接口:

  JDK7及之前:只能定义全局常量和抽象方法。

  接口中的所有成员变量默认由public static final修饰,不用写就可以省略。默认情况下,接口中的所有抽象方法都由public abstract修饰。代码演示:

  公共接口Runner { int ID=1;//=public static final int ID=1;void start();//=公共抽象void start();public void run();//=公共抽象void run();void stop();//=公共抽象void stop();}JDK8:除了定义全局常量和抽象方法,还可以定义静态方法和默认方法。

  1.静态方法:用static关键字修饰。

  接口中定义的静态方法只能通过接口调用,并执行其方法体。我们经常在相互使用的类中使用静态方法。您可以在标准库中找到成对的接口和类,如集合/集合或路径/路径。

  2.默认方法:默认方法用default关键字修饰。可以通过实现类对象来调用。我们在现有接口中提供了一个新方法,同时保持了与旧版本代码的兼容性。比如java 8 API为集合、列表、比较器等接口提供了丰富的默认方法。

  如果在一个接口中定义了一个默认方法,而在另一个接口中定义了一个具有相同名称和参数的方法(不管这个方法是否是默认方法),那么当实现类同时实现这两个接口时,就会出现接口冲突。解决方案:实现类必须覆盖接口中具有相同名称和参数的方法,以解决冲突。如果在一个接口中定义了一个默认方法,在父类中定义了一个同名同参数的非抽象方法,那么子类默认会调用父类中同名同参数的方法,不会有任何冲突。这时,遵守类优先的原则。接口中具有相同名称和参数的默认方法被忽略。如何调用父类中被覆盖的方法和子类(或实现类)的方法中的接口?代码演示1:

  public void my method(){ method 3();//调用自己定义的覆盖方法super . method 3();//调用的是父类//中声明的调用接口中的默认方法comparea . super . method 3();compareb . super . method 3();}代码演示2:

  接口文件

  al {// 孝顺的default void help() {System.out.println("老妈,我来救你了");}}interface Spoony {// 痴情的default void help() {System.out.println("媳妇,别怕,我来了");}}class Father{public void help(){System.out.println("儿子,就我媳妇!");}}class Man extends Father implements Filial, Spoony {@Overridepublic void help() {System.out.println("我该就谁呢?");Filial.super.help();Spoony.super.help();}}接口中不能定义构造器的!意味着接口不可以实例化。

  接口采用多继承机制。可以实现多个接口 ,弥补了Java单继承性的局限性。

  格式:class AA extends BB implements CC,DD,EE;

  Java开发中,接口通过让类去实现(implements)的方式来使用。

  如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化 。如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类。代码演示:

  

/*实现类SubAdapter必须给出接口SubInterface以及父接口MyInterface中所有方法的实现。否则,SubAdapter仍需声明为abstract的。*/interface MyInterface{ String s=“MyInterface”; public void absM1(); }interface SubInterface extends MyInterface{ public void absM2(); }public class SubAdapter implements SubInterface{ public void absM1(){System.out.println(“absM1”);} public void absM2(){System.out.println(“absM2”);}}

接口与接口之间可以继承,而且可以多继承。

 

  一个类可以实现多个无关的接口。

  代码演示:

  

interface Runner { public void run();}interface Swimmer {public double swim();}class Creator{public int eat(){…}} class Man extends Creator implements Runner ,Swimmer{ public void run() {……} public double swim() {……} public int eat() {……}}

与继承关系类似,接口与实现类之间存在多态性

 

  代码演示:

  

public class Test{ public static void main(String args[]){ Test t = new Test(); Man m = new Man(); t.m1(m); t.m2(m); t.m3(m); } public String m1(Runner f) { f.run(); } public void m2(Swimmer s) {s.swim();} public void m3(Creator a) {a.eat();}}

接口的匿名实现类匿名对象

 

  代码演示:

  

public class USBTest {public static void main(String[] args) {Computer com = new Computer();//1.创建了接口的非匿名实现类的非匿名对象Flash flash = new Flash();com.transferData(flash);//2. 创建了接口的非匿名实现类的匿名对象com.transferData(new Printer());//3. 创建了接口的匿名实现类的非匿名对象USB phone = new USB(){@Overridepublic void start() {System.out.println("手机开始工作");}@Overridepublic void stop() {System.out.println("手机结束工作");}};com.transferData(phone);//4. 创建了接口的匿名实现类的匿名对象com.transferData(new USB(){@Overridepublic void start() {System.out.println("mp3开始工作");}@Overridepublic void stop() {System.out.println("mp3结束工作");}});}}class Computer{public void transferData(USB usb){//USB usb = new Flash();usb.start();System.out.println("具体传输数据的细节");usb.stop();}}interface USB{//常量:定义了长、宽、最大最小的传输速度等void start();void stop();}class Flash implements USB{@Overridepublic void start() {System.out.println("U盘开启工作");}@Overridepublic void stop() {System.out.println("U盘结束工作");}}class Printer implements USB{@Overridepublic void start() {System.out.println("打印机开启工作");}@Overridepublic void stop() {System.out.println("打印机结束工作");}}

 

  

四、应用-代理模式(Proxy)

 

  

1. 应用场景

安全代理:屏蔽对真实角色的直接访问。远程代理:通过代理类处理远程方法调用(RMI)。延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象,比如你要开发一个大文档查看软件,大文档中有大的图片,有可能一个图片有100MB,在打开文件时,不可能将所有的图片都显示出来,这样就可以使用代理模式,当需要查看图片时,用proxy来进行大图片的打开。

 

  

2. 分类

静态代理(静态定义代理类)动态代理(动态生成代理类)

 

  

3. 代码演示

//举例一:interface Network { public void browse(); }// 被代理类class RealServer implements Network { @Override public void browse() { System.out.println("真实服务器上 网浏览信息"); } }// 代理类class ProxyServer implements Network { private Network network; public ProxyServer(Network network) { this.network = network; } public void check() { System.out.println("检查网络连接等操作");} public void browse() { check(); network.browse(); } }public class ProxyDemo { public static void main(String[] args) { Network net = new ProxyServer(new RealServer()); net.browse(); } }//举例二:public class StaticProxyTest {public static void main(String[] args) {Proxy s = new Proxy(new RealStar());s.confer();s.signContract();s.bookTicket();s.sing();s.collectMoney();}}interface Star {void confer();// 面谈void signContract();// 签合同void bookTicket();// 订票void sing();// 唱歌void collectMoney();// 收钱}//被代理类class RealStar implements Star {public void confer() {}public void signContract() {}public void bookTicket() {}public void sing() {System.out.println("明星:歌唱~~~");}public void collectMoney() {}}//代理类class Proxy implements Star {private Star real;public Proxy(Star real) {this.real = real;}public void confer() {System.out.println("经纪人面谈");}public void signContract() {System.out.println("经纪人签合同");}public void bookTicket() {System.out.println("经纪人订票");}public void sing() {real.sing();}public void collectMoney() {System.out.println("经纪人收钱");}}

 

  

五、接口和抽象类之间的对比

No.区别点抽象类接口1定义包含抽象方法的类主要是抽象方法和全局常量的集合2组成构造方法、抽象方法、普通方法、常量、变量常量、抽象方法、(jdk8.0:默认方法、静态方法)3使用子类继承抽象类(extends)子类实现接口(implements)4关系抽象类可以实现多个接口接口不能继承抽象类,但允许继承多个接口5常见设计模式模板方法简单工厂、工厂方法、代理模式6对象都通过对象的多态性产生实例化对象都通过对象的多态性产生实例化对象7局限抽象类有单继承的局限接口没有此局限8实际作为一个模板是作为一个标准或是表示一种能力9选择如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局限

 

  

六、经典题目(排错)

//题目一:interface A { int x = 0; }class B { int x = 1; }class C extends B implements A { public void pX() { System.out.println(x); }public static void main(String[] args) { new C().pX(); } }//题目二:interface Playable { void play(); }interface Bounceable { void play();}interface Rollable extends Playable, Bounceable { Ball ball = new Ball("PingPang");}class Ball implements Rollable { private String name; public String getName() { return name; } public Ball(String name) { this.name = name; } public void play() { ball = new Ball("Football"); System.out.println(ball.getName()); } }

到此这篇关于Java超详细透彻讲解接口的文章就介绍到这了,更多相关Java接口内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: