最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

精通Java接口的使用與原理

 更新時(shí)間:2022年04月06日 16:27:05   作者:高不高  
接口,在JAVA編程語(yǔ)言中是一個(gè)抽象類(lèi)型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類(lèi)通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法

接口基礎(chǔ)知識(shí)

為什么需要接口

需求:要求實(shí)現(xiàn)防盜門(mén)的功能,門(mén)有“開(kāi)”和“關(guān)”的功能,鎖有“上鎖”和“開(kāi)鎖”功能。
分析:首先防盜門(mén)是一個(gè)門(mén),它有一把鎖。按照之前學(xué)過(guò)的面向?qū)ο蟮乃枷?,可以將門(mén)和鎖分別定義成抽象類(lèi)。但是,不能讓防盜門(mén)在繼承們的同時(shí)又繼承鎖。原因有兩點(diǎn):第一,防盜門(mén)不是鎖,不符合繼承中is a的關(guān)系,第二,Java只支持單繼承,如何解決這個(gè)問(wèn)題呢?這時(shí)就要用到接口,可以將鎖定義為接口,讓防盜門(mén)繼承門(mén),實(shí)現(xiàn)鎖的接口。那么什么是借口呢?它的特點(diǎn)又是什么呢?下面讓我們來(lái)學(xué)習(xí)一下。

什么是接口

在生活中,接口是一套規(guī)范,只要滿足這個(gè)規(guī)范的設(shè)備,就可以將它們組裝到一起,從而實(shí)現(xiàn)該設(shè)備的功能。
而在軟件中,接口同樣是一種規(guī)范和標(biāo)準(zhǔn),它們可以約束類(lèi)的行為,是一些方法特征的集合,但是沒(méi)有方法的實(shí)現(xiàn),從這個(gè)角度來(lái)講,接口可以看作一種特殊的“抽象類(lèi)”,但是采用與抽象類(lèi)完全不同的語(yǔ)法來(lái)表示,兩者的設(shè)計(jì)理念也是不同的,抽象類(lèi)利于代碼的復(fù)用,接口利于代碼的擴(kuò)展和維護(hù)。

接口的定義語(yǔ)法和類(lèi)實(shí)現(xiàn)接口的語(yǔ)法

[修飾符] interface 接口名 extends 父接口1,父接口2,…{
//常量定義
//方法定義
}
class 類(lèi)名 extends 父類(lèi)名 implements 接口1,接口2,…{
//類(lèi)成員
}

接口說(shuō)明
1.接口的命名規(guī)范和類(lèi)相同。
2.接口中可以定義常量,不能定義變量。
3.接口中所有的方法都是抽象方法。
4.和抽象類(lèi)一樣,接口也不能實(shí)例化,接口中不能有構(gòu)造方法。
5.接口之間可以通過(guò)extends實(shí)現(xiàn)繼承關(guān)系,一個(gè)接口可以繼承多個(gè)接口,但接口不能繼承類(lèi)。
6.接口的實(shí)現(xiàn)類(lèi)必須實(shí)現(xiàn)接口的全部方法,否則必須定義為抽象類(lèi)。

下面就使用Java接口來(lái)模擬生活中的USB接口

//先定義USB接口,通過(guò)service()方法提供服務(wù)
/*
 * USB接口
 */
public interface UsbInterFace {
	/*
	 * USB接口提供服務(wù)
	 */
	void service();
}

//定義U盤(pán)類(lèi),實(shí)現(xiàn)USB接口中的service()方法,進(jìn)行數(shù)據(jù)傳輸
/*
 * U盤(pán)
 */
public class UDisk implements UsbInterFace{
	public void service(){
		System.out.println("連接USB口,開(kāi)始傳輸數(shù)據(jù)");
	}

}

//定義USB風(fēng)扇類(lèi),實(shí)現(xiàn)USB接口中的service()方法,獲得電流使風(fēng)扇轉(zhuǎn)動(dòng)
/*
 * USB風(fēng)扇
 */
public class UsbFan implements UsbInterFace{
	public void service(){
		System.out.println("連接USB口,獲得電流,風(fēng)扇開(kāi)始轉(zhuǎn)動(dòng)");
	}
}
//編寫(xiě)測(cè)試類(lèi),實(shí)現(xiàn)U盤(pán)傳輸數(shù)據(jù),使USB風(fēng)扇轉(zhuǎn)動(dòng)
/*
 * 測(cè)試類(lèi)
 */
public class Test {

	public static void main(String[] args) {
		//1.U盤(pán)
		UsbInterFace uDisk=new UDisk();
		uDisk.service();
		//2.USB風(fēng)扇
		UsbInterFace usbFan=new UsbFan();
		usbFan.service();
	}
}

運(yùn)行結(jié)果:

在這里插入圖片描述

通過(guò)該示例我們學(xué)習(xí)了如何定義接口和實(shí)現(xiàn)接口,這些技能在后面的學(xué)習(xí)中將會(huì)被反復(fù)用到。

接口表示一種能力

使用接口實(shí)現(xiàn)防盜門(mén)功能

通過(guò)上面的代碼,我們已經(jīng)了解Java接口的語(yǔ)法和規(guī)則,現(xiàn)在就使用借口來(lái)實(shí)現(xiàn)防盜門(mén)功能

//定義Door類(lèi),具有開(kāi)和關(guān)的功能
/*
 * 門(mén)
 */
public abstract class Door {
	public abstract void open();//開(kāi)
	public abstract void close();//關(guān)
}

//定義Lock接口,具備上鎖和開(kāi)鎖的功能
/*
 * 鎖,接口
 */
public interface Lock {
	void lockUp();//上鎖
	void openLock();//開(kāi)鎖
}

//定義TheftproofDoor類(lèi),繼承Door類(lèi),實(shí)現(xiàn)Lock接口
*
 * 防盜門(mén)類(lèi)
 */
public class TheftproofDoor extends Door implements Lock,DoorBell{
	public void lockUp() {
		System.out.println("插進(jìn)鑰匙,向左旋轉(zhuǎn)鑰匙三圈,鎖上了,拔出鑰匙");
	}
	public void openLock(){
		System.out.println("插進(jìn)鑰匙,向右旋轉(zhuǎn)鑰匙三圈,鎖打開(kāi)了,拔出鑰匙");
	}
	public void open(){
		System.out.println("用力推,門(mén)打開(kāi)了");
	}
	public void close(){
		System.out.println("輕輕拉門(mén),門(mén)關(guān)上了");
	}
}

//編寫(xiě)測(cè)試類(lèi),實(shí)現(xiàn)防盜門(mén)的關(guān)門(mén),開(kāi)門(mén),上鎖,開(kāi)鎖的功能
/*
 * 測(cè)試類(lèi)
 */
public class DoorTest {
	public static void main(String[] args) {
		TheftproofDoor tfd=new TheftproofDoor();
		tfd.close();//關(guān)門(mén)
		tfd.lockUp();//上鎖
		tfd.takePictures();//來(lái)訪客人拍照存儲(chǔ)
		tfd.openLock();//開(kāi)鎖
		tfd.open();//開(kāi)門(mén)
	}
}

運(yùn)行結(jié)果:

在這里插入圖片描述

通過(guò)上面的案例我們了解了接口表示一種能力,一個(gè)類(lèi)實(shí)現(xiàn)了某個(gè)接口,就表示這個(gè)類(lèi)具備了某種能力,那我們就為防盜門(mén)增加一個(gè)拍照存檔的功能,當(dāng)主人不在家有客人來(lái)訪時(shí)便會(huì)自動(dòng)拍照存儲(chǔ)。

/*
 * 門(mén)鈴接口
 */
public interface DoorBell {
	void takePictures();//鈴響拍照存檔功能
}

//為防盜門(mén)增加門(mén)鈴功能
/*
 * 防盜門(mén)類(lèi)
 */
public class TheftproofDoor extends Door implements Lock,DoorBell{
//省略其他實(shí)現(xiàn)方法
public void takePictures(){
		System.out.println("鈴......咔嚓......照片已存儲(chǔ)");
	}
}

//修改測(cè)試類(lèi),代碼如下:
/*
 * 測(cè)試類(lèi)
 */
public class DoorTest {
	public static void main(String[] args) {
		TheftproofDoor tfd=new TheftproofDoor();
		tfd.close();//關(guān)門(mén)
		tfd.lockUp();//上鎖
		tfd.takePictures();//來(lái)訪客人拍照存儲(chǔ)
		tfd.openLock();//開(kāi)鎖
		tfd.open();//開(kāi)門(mén)
	}
}

運(yùn)行結(jié)果:

在這里插入圖片描述

接口表示一種約定

使用接口實(shí)現(xiàn)打印機(jī)打印功能

需求:要求實(shí)現(xiàn)打印機(jī)打印功能。打印機(jī)的墨盒可能是彩色的,也可能是黑白的,所有的紙張可以有很多類(lèi)型。
代碼如下:

//定義墨盒接口InkBox,約定墨盒有顏色
/*
 * 墨盒接口
 */
public interface InkBox {
	/*
	 * 得到墨盒顏色
	 */
	public String getColor();
}

//定義紙張接口Paper,約定紙張有大小
/*
 * 紙張接口
 */
public interface Paper {
	/*
	 * 得到紙張大小
	 */
	public String getSize();
}

//定義打印機(jī)類(lèi),引用墨盒接口,紙張接口實(shí)現(xiàn)打印功能
/*
 * 打印機(jī)類(lèi)
 */
public class Printer {
	InkBox inkBox;//墨盒
	Paper paper;//紙張
	/*
	 * 設(shè)置打印機(jī)墨盒
	 */
	public void setInkBox(InkBox inkBox){
		this.inkBox=inkBox;
	}
	/*
	 * 設(shè)置打印機(jī)紙張
	 */
	public void setPaper(Paper paper){
		this.paper=paper;
	}
	/*
	 * 使用墨盒在紙張上打印
	 */
	public void print(){
		System.out.println("使用"+inkBox.getColor()+"墨盒在"+paper.getSize()+"紙張上打印");
	}
}

//墨盒廠商按照InkBox接口實(shí)現(xiàn)ColorInkbox類(lèi)和GrayInkBox類(lèi)
/*
 * 彩色墨盒
 */
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接口實(shí)現(xiàn)A4Paper類(lèi)和B5Paper類(lèi)
public class A4Paper implements Paper{
	public String getSize(){
		return "A4";
	}
}
public class B5Paper implements Paper{
	public String getSize(){
		return "B5";
	}

}
//“組裝”打印機(jī),讓打印機(jī)通過(guò)不同的墨盒和紙張實(shí)現(xiàn)打印
public class TestInkBox {
	public static void main(String[] args) {
		//1.定義打印機(jī)
		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();
	}
}

運(yùn)行結(jié)果:

在這里插入圖片描述

在C#中使用接口

使用C#實(shí)現(xiàn)打印功能

語(yǔ)法

[修飾符] interface 接口名:父接口1,父接口2,…{
屬性定義
方法定義
}
class 類(lèi)名:父類(lèi)名,接口1,接口2,…{}

c#接口說(shuō)明
1.接口之間可以通過(guò)“:”來(lái)實(shí)現(xiàn)繼承關(guān)系,一個(gè)接口可以繼承多個(gè)接口,但接口不能繼承類(lèi)。類(lèi)只能繼承一個(gè)父類(lèi),但可以實(shí)現(xiàn)多個(gè)接口,使用“:”來(lái)繼承類(lèi)并實(shí)現(xiàn)接口
2.接口定義零個(gè)或多個(gè)成員,成員主要是方法,屬性和索引器。借口中不能包含常量,變量和構(gòu)造方法,也不能包含任何靜態(tài)成員。
3.接口成員訪問(wèn)權(quán)限是public,定義接口時(shí)顯式指定任何修飾符都是非法的。
4.按照慣例,c#中接口的名稱(chēng)以大寫(xiě)字母“I”開(kāi)頭。

下面用c#實(shí)現(xiàn)打印機(jī)案例,通過(guò)對(duì)比其中的一同,更好的掌握接口在兩種語(yǔ)法中的應(yīng)用。

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();
        }
    }
}

運(yùn)行結(jié)果:

在這里插入圖片描述

在Java與c#兩種語(yǔ)言中,接口具有以下區(qū)別
1.Java中通過(guò)extends來(lái)繼承父接口,類(lèi)通過(guò)implements實(shí)現(xiàn)接口;c#中通過(guò)":"來(lái)實(shí)現(xiàn)這兩個(gè)功能。
2.Java接口中的成員變量都是常量,自動(dòng)用public static final修飾;c#接口中不允許存在成員變量,但可以有屬性。
3.Java接口中屬性和方法都可以用public修飾;c#中默認(rèn)用public,但不允許顯式使用public修飾。
4.Java接口中可以定義靜態(tài)變量和方法;c#接口中不允許包含任何靜態(tài)成員。

到此這篇關(guān)于精通Java接口的使用與原理的文章就介紹到這了,更多相關(guān)Java 接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中的@Conditional注解使用和原理詳解

    Spring中的@Conditional注解使用和原理詳解

    這篇文章主要介紹了Spring中的@Conditional注解使用和原理詳解,@Conditional在Spring4.0中被引入,用于開(kāi)發(fā)"If-Then-Else"類(lèi)型的bean注冊(cè)條件檢查,在@Conditional之前,也有一個(gè)注解@Porfile起到類(lèi)似的作用,需要的朋友可以參考下
    2024-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)通關(guān)時(shí)間復(fù)雜度和空間復(fù)雜度

    Java數(shù)據(jù)結(jié)構(gòu)通關(guān)時(shí)間復(fù)雜度和空間復(fù)雜度

    對(duì)于一個(gè)算法,其時(shí)間復(fù)雜度和空間復(fù)雜度往往是相互影響的,當(dāng)追求一個(gè)較好的時(shí)間復(fù)雜度時(shí),可能會(huì)使空間復(fù)雜度的性能變差,即可能導(dǎo)致占用較多的存儲(chǔ)空間,這篇文章主要給大家介紹了關(guān)于Java時(shí)間復(fù)雜度、空間復(fù)雜度的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • java8中定時(shí)任務(wù)最佳實(shí)現(xiàn)方式(實(shí)現(xiàn)原理)

    java8中定時(shí)任務(wù)最佳實(shí)現(xiàn)方式(實(shí)現(xiàn)原理)

    這篇文章主要介紹了java8中定時(shí)任務(wù)最佳實(shí)現(xiàn)方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-12-12
  • 使用Spring AOP做接口權(quán)限校驗(yàn)和日志記錄

    使用Spring AOP做接口權(quán)限校驗(yàn)和日志記錄

    本文介紹了面向切面編程(AOP)的基本概念、應(yīng)用場(chǎng)景及其在Spring中的實(shí)現(xiàn)原理,通過(guò)AOP,可以方便地在不修改原有代碼的情況下,實(shí)現(xiàn)日志記錄、權(quán)限校驗(yàn)等功能,以學(xué)生身份證號(hào)查詢(xún)接口為例,展示了如何定義權(quán)限注解、切面類(lèi)以及權(quán)限驗(yàn)證服務(wù),感興趣的朋友一起看看吧
    2025-01-01
  • Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式總結(jié)

    Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式總結(jié)

    使用Mybatis-plus可以很方便的實(shí)現(xiàn)批量新增和批量修改,不僅比自己寫(xiě)foreach遍歷方便很多,而且性能也更加優(yōu)秀,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus批量添加或修改數(shù)據(jù)的3種方式,需要的朋友可以參考下
    2023-05-05
  • java科學(xué)計(jì)數(shù)法轉(zhuǎn)換成數(shù)字的幾種方法

    java科學(xué)計(jì)數(shù)法轉(zhuǎn)換成數(shù)字的幾種方法

    我們?cè)谔幚泶髷?shù)值的時(shí)候,常常會(huì)遇到使用科學(xué)計(jì)數(shù)法表示的數(shù)字,科學(xué)計(jì)數(shù)法是一種表示大數(shù)值或小數(shù)值的方式,下面這篇文章主要給大家介紹了關(guān)于java科學(xué)計(jì)數(shù)法轉(zhuǎn)換成數(shù)字的幾種方法,需要的朋友可以參考下
    2024-03-03
  • SpringBoot之導(dǎo)入靜態(tài)資源詳解

    SpringBoot之導(dǎo)入靜態(tài)資源詳解

    今天帶大家學(xué)習(xí)SpringBoot導(dǎo)入靜態(tài)資源的過(guò)程,文中介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • spring整合cxf框架實(shí)例

    spring整合cxf框架實(shí)例

    下面小編就為大家?guī)?lái)一篇spring整合cxf框架實(shí)例。小編覺(jué)得挺不錯(cuò)的。現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 詳解Java構(gòu)建樹(shù)結(jié)構(gòu)的公共方法

    詳解Java構(gòu)建樹(shù)結(jié)構(gòu)的公共方法

    本文主要介紹了詳解Java構(gòu)建樹(shù)結(jié)構(gòu)的公共方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java內(nèi)存區(qū)域管理詳解

    Java內(nèi)存區(qū)域管理詳解

    這篇文章主要介紹了Java內(nèi)存區(qū)域管理詳解,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09

最新評(píng)論

仁寿县| 张家川| 儋州市| 那曲县| 鄱阳县| 濉溪县| 水富县| 宁夏| 常山县| 鄂托克旗| 武威市| 泗阳县| 禹州市| 文昌市| 重庆市| 西乡县| 辉南县| 根河市| 溧阳市| 龙口市| 铜川市| 鄯善县| 金山区| 蒙城县| 新源县| 林甸县| 宝清县| 七台河市| 绥棱县| 叶城县| 河池市| 濮阳县| 正阳县| 博客| 潞西市| 陆川县| 西贡区| 鄄城县| 琼中| 诸城市| 淳化县|