JAVA接口的使用,怎么理解java接口

  JAVA接口的使用,怎么理解java接口

  00-1010

接口基础知识

要求:要求实现防盗门的功能。门有“开”和“关”的功能,锁有“锁”和“开锁”的功能。分析:首先防盗门是带锁的门。根据之前学过的面向对象思想,门和锁可以分别定义为抽象类。但是,你不能在继承门的同时,让防盗门继承锁。原因有二:第一,防盗门不是锁,不符合继承中是a的关系。第二,Java只支持单一继承。如何解决这个问题?这时候就需要接口了,可以把锁定义成一个接口,这样防盗门就可以继承门,实现锁的接口。那么什么是借口呢?它有什么特点?我们来了解一下。

 

  00-1010在生活中,一个接口就是一套规范。只要能把符合这个规范的器件组装在一起,就能实现器件的功能。在软件中,接口也是一种规范和标准,可以约束类的行为,是一些方法特性的集合,但是没有方法来实现。从这个角度来说,接口可以看作是一种特殊的“抽象类”,但它的语法与抽象类完全不同,它们的设计理念也不同。抽象类有利于代码重用,接口有利于代码扩展和维护。

  接口定义语法和类实现接口语法。

  【修饰符】接口接口名扩展父接口1,父接口2,…{//常量定义//方法定义}类名扩展父类名实现接口1,接口2,…{//类成员}接口描述1。接口的命名规范与类的命名规范相同。2.可以在接口中定义常量,但不能定义变量。3.接口中的所有方法都是抽象方法。4.和抽象类一样,接口是不能实例化的,接口中也不能有构造方法。5.接口可以通过扩展来继承。一个接口可以继承多个接口,但是接口不能继承类。6.接口的实现类必须实现接口的所有方法,否则必须定义为抽象类。

  让我们用Java接口来模拟生活中的USB接口。

  //先定义USB接口,通过service()方法提供服务。/* * USB接口*/公共接口USB接口{/* * USB接口提供服务*/void service();}//定义u盘类,在USB接口中实现service()方法,传输数据。/* *u盘*/public类udisk实现USB接口{ public void service(){ system . out . println(连接USB端口并开始传输数据);} }//定义USB风扇类,在USB接口中实现service()方法,获取电流使风扇旋转。/* * USB fan */public类USB fan实现USB接口{ public void service(){ system . out . println(连接USB口,获取电流,风扇开始转动);} }//写一个测试类,实现u盘传输数据。/* *测试类*/公共类Test { public static void main(string[]args){//1。USB interface uDisk=new uDisk();udisk . service();//2.USB风扇USB interface USB fan=new USB fan();USB fan . service();}}运行结果:

  通过这个例子,我们学习了如何定义和实现接口,这些技巧将在以后的学习中反复使用。

  00-1010

为什么需要接口

通过上面的代码,我们已经知道了Java接口的语法和规则。现在我们就用借口来实现防盗门的功能。

 

  //定义开门关门函数的门类/* *门*/公共抽象类door {公共抽象void open();//Open公共抽象void close();//Off }//定义锁接口,具有锁和解锁功能。/* * Lock,interface */public interface Lock { void Lock up();//Lock void open Lock();//UnLock }//定义TheftProofdoor类,继承Door类,实现Lock接口* *防盗门类*/Public类TheftproofDoor扩展门实现lock,Door bell { Public void lock up(){ system . out . println(插入钥匙,向左旋转三次,锁上,拔出钥匙);} public void open lock(){ system . out . println(插入钥匙,向右转动钥匙三次,锁被打开,拔出钥匙);} public void open(){ system . out . println(用力一推,门开);}公共vo

  id close(){System.out.println("轻轻拉门,门关上了");}}//编写测试类,实现防盗门的关门,开门,上锁,开锁的功能/* * 测试类 */public class DoorTest {public static void main(String[] args) {TheftproofDoor tfd=new TheftproofDoor();tfd.close();//关门tfd.lockUp();//上锁tfd.takePictures();//来访客人拍照存储tfd.openLock();//开锁tfd.open();//开门}}运行结果:

  

 

  通过上面的案例我们了解了接口表示一种能力,一个类实现了某个接口,就表示这个类具备了某种能力,那我们就为防盗门增加一个拍照存档的功能,当主人不在家有客人来访时便会自动拍照存储。

  

/* * 门铃接口 */public interface DoorBell {void takePictures();//铃响拍照存档功能}//为防盗门增加门铃功能/* * 防盗门类 */public class TheftproofDoor extends Door implements Lock,DoorBell{//省略其他实现方法public void takePictures(){System.out.println("铃......咔嚓......照片已存储");}}//修改测试类,代码如下:/* * 测试类 */public class DoorTest {public static void main(String[] args) {TheftproofDoor tfd=new TheftproofDoor();tfd.close();//关门tfd.lockUp();//上锁tfd.takePictures();//来访客人拍照存储tfd.openLock();//开锁tfd.open();//开门}}

运行结果:

 

  

 

  

接口表示一种约定

使用接口实现打印机打印功能

需求:要求实现打印机打印功能。打印机的墨盒可能是彩色的,也可能是黑白的,所有的纸张可以有很多类型。代码如下:

 

  

//定义墨盒接口InkBox,约定墨盒有颜色/* * 墨盒接口 */public interface InkBox {/* * 得到墨盒颜色 */public String getColor();}//定义纸张接口Paper,约定纸张有大小/* * 纸张接口 */public interface Paper {/* * 得到纸张大小 */public String getSize();}//定义打印机类,引用墨盒接口,纸张接口实现打印功能/* * 打印机类 */public class Printer {InkBox inkBox;//墨盒Paper paper;//纸张/* * 设置打印机墨盒 */public void setInkBox(InkBox inkBox){this.inkBox=inkBox;}/* * 设置打印机纸张 */public void setPaper(Paper paper){this.paper=paper;}/* * 使用墨盒在纸张上打印 */public void print(){System.out.println("使用"+inkBox.getColor()+"墨盒在"+paper.getSize()+"纸张上打印");}}//墨盒厂商按照InkBox接口实现ColorInkbox类和GrayInkBox类/* * 彩色墨盒 */public class ColorInkBox implements InkBox{public String getColor(){return "彩色";}}/* * 墨色墨盒 */public class GrayInkBox implements InkBox{public String getColor(){return "黑色";}}/* * 墨色墨盒 */public class GrayInkBox implements InkBox{public String getColor(){return "黑色";}}/* * 墨色墨盒 */public class GrayInkBox implements InkBox{public String getColor(){return "黑色";}}//纸张厂商按照Paper接口实现A4Paper类和B5Paper类public class A4Paper implements Paper{public String getSize(){return "A4";}}public class B5Paper implements Paper{public String getSize(){return "B5";}}//“组装”打印机,让打印机通过不同的墨盒和纸张实现打印public class TestInkBox {public static void main(String[] args) {//1.定义打印机InkBox inkBox=null;Paper paper=null;Printer printer=new Printer();//2.使用黑白墨盒在A4纸上打印inkBox=new GrayInkBox();paper=new A4Paper();printer.setInkBox(inkBox);printer.setPaper(paper);printer.print();3.使用彩色墨盒在B5纸上打印inkBox=new ColorInkBox();paper=new B5Paper();printer.setInkBox(inkBox);printer.setPaper(paper);printer.print();//4.使用彩色墨盒在A4纸上打印paper=new A4Paper();printer.setPaper(paper);printer.print();}}

运行结果:

 

  

 

  

在C#中使用接口

使用C#实现打印功能

语法

 

  

[修饰符] interface 接口名:父接口1,父接口2,…{属性定义方法定义}class 类名:父类名,接口1,接口2,…{}

c#接口说明1.接口之间可以通过:来实现继承关系,一个接口可以继承多个接口,但接口不能继承类。类只能继承一个父类,但可以实现多个接口,使用:来继承类并实现接口2.接口定义零个或多个成员,成员主要是方法,属性和索引器。借口中不能包含常量,变量和构造方法,也不能包含任何静态成员。3.接口成员访问权限是public,定义接口时显式指定任何修饰符都是非法的。4.按照惯例,c#中接口的名称以大写字母I开头。

 

  下面用c#实现打印机案例,通过对比其中的一同,更好的掌握接口在两种语法中的应用。

  

namespace InterfaceDemo{ public interface InkBox { string Color { get; } } public interface Paper { string Size { get; } } class Printer { InkBox inkBox;//墨盒 public InkBox InkBox { set { inkBox = value; } } Paper paper;//纸张 public Paper Paper { set { paper = value; } } public void print() { Console.WriteLine("使用" + inkBox.Color + "墨盒在" + paper.Size + "纸上打印"); } } public class ColorInkBox: InkBox { public string Color { get { return "彩色"; } } } public class GrayInkBox: InkBox { public string Color { get { return "黑白"; } } } public class A4Paper : Paper { public string Size { get { return "A4"; } } } public class B5Paper : Paper { public string Size { get { return "B5"; } } } public class Program { static void Main(string[] args) { InkBox inkBox = null; Paper paper = null; Printer printer = new Printer(); inkBox = new GrayInkBox(); paper = new A4Paper(); printer.InkBox = inkBox; printer.Paper = paper; printer.print(); inkBox = new ColorInkBox(); paper = new B5Paper(); printer.InkBox = inkBox; printer.Paper = paper; printer.print(); paper = new A4Paper(); printer.Paper = paper; printer.print(); Console.ReadLine(); } }}

运行结果:

 

  

 

  在Java与c#两种语言中,接口具有以下区别1.Java中通过extends来继承父接口,类通过implements实现接口;c#中通过":"来实现这两个功能。2.Java接口中的成员变量都是常量,自动用public static final修饰;c#接口中不允许存在成员变量,但可以有属性。3.Java接口中属性和方法都可以用public修饰;c#中默认用public,但不允许显式使用public修饰。4.Java接口中可以定义静态变量和方法;c#接口中不允许包含任何静态成员。

  到此这篇关于精通Java接口的使用与原理的文章就介绍到这了,更多相关Java 接口内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

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

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