亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

精通Java接口的使用與原理

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

接口基礎知識

為什么需要接口

需求:要求實現(xiàn)防盜門的功能,門有“開”和“關”的功能,鎖有“上鎖”和“開鎖”功能。
分析:首先防盜門是一個門,它有一把鎖。按照之前學過的面向對象的思想,可以將門和鎖分別定義成抽象類。但是,不能讓防盜門在繼承們的同時又繼承鎖。原因有兩點:第一,防盜門不是鎖,不符合繼承中is a的關系,第二,Java只支持單繼承,如何解決這個問題呢?這時就要用到接口,可以將鎖定義為接口,讓防盜門繼承門,實現(xiàn)鎖的接口。那么什么是借口呢?它的特點又是什么呢?下面讓我們來學習一下。

什么是接口

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

接口的定義語法和類實現(xiàn)接口的語法

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

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

下面就使用Java接口來模擬生活中的USB接口

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

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

}

//定義USB風扇類,實現(xiàn)USB接口中的service()方法,獲得電流使風扇轉動
/*
 * USB風扇
 */
public class UsbFan implements UsbInterFace{
	public void service(){
		System.out.println("連接USB口,獲得電流,風扇開始轉動");
	}
}
//編寫測試類,實現(xiàn)U盤傳輸數(shù)據(jù),使USB風扇轉動
/*
 * 測試類
 */
public class Test {

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

運行結果:

在這里插入圖片描述

通過該示例我們學習了如何定義接口和實現(xiàn)接口,這些技能在后面的學習中將會被反復用到。

接口表示一種能力

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

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

//定義Door類,具有開和關的功能
/*
 * 門
 */
public abstract class Door {
	public abstract void open();//開
	public abstract void close();//關
}

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

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

//編寫測試類,實現(xiàn)防盜門的關門,開門,上鎖,開鎖的功能
/*
 * 測試類
 */
public class DoorTest {
	public static void main(String[] args) {
		TheftproofDoor tfd=new TheftproofDoor();
		tfd.close();//關門
		tfd.lockUp();//上鎖
		tfd.takePictures();//來訪客人拍照存儲
		tfd.openLock();//開鎖
		tfd.open();//開門
	}
}

運行結果:

在這里插入圖片描述

通過上面的案例我們了解了接口表示一種能力,一個類實現(xiàn)了某個接口,就表示這個類具備了某種能力,那我們就為防盜門增加一個拍照存檔的功能,當主人不在家有客人來訪時便會自動拍照存儲。

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

//為防盜門增加門鈴功能
/*
 * 防盜門類
 */
public class TheftproofDoor extends Door implements Lock,DoorBell{
//省略其他實現(xiàn)方法
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();//開門
	}
}

運行結果:

在這里插入圖片描述

接口表示一種約定

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

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

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

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

//定義打印機類,引用墨盒接口,紙張接口實現(xiàn)打印功能
/*
 * 打印機類
 */
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接口實現(xiàn)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接口實現(xiàn)A4Paper類和B5Paper類
public class A4Paper implements Paper{
	public String getSize(){
		return "A4";
	}
}
public class B5Paper implements Paper{
	public String getSize(){
		return "B5";
	}

}
//“組裝”打印機,讓打印機通過不同的墨盒和紙張實現(xiàn)打印
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#實現(xiàn)打印功能

語法

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

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

下面用c#實現(xiàn)打印機案例,通過對比其中的一同,更好的掌握接口在兩種語法中的應用。

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

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

相關文章

  • 如何使用Java實現(xiàn)指定概率的抽獎

    如何使用Java實現(xiàn)指定概率的抽獎

    這篇文章主要給大家介紹了關于如何使用Java實現(xiàn)指定概率的抽獎的相關資料,Java抽獎程序的基本原理是通過隨機數(shù)生成器來實現(xiàn)隨機抽獎的功能,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • java使用定時器實現(xiàn)監(jiān)聽數(shù)據(jù)變化

    java使用定時器實現(xiàn)監(jiān)聽數(shù)據(jù)變化

    這篇文章主要為大家詳細介紹了Java如何使用定時器監(jiān)聽數(shù)據(jù)變化,當滿足某個條件時(例如沒有數(shù)據(jù)更新)自動執(zhí)行某項任務,有興趣的可以了解下
    2023-11-11
  • Java日期時間字符串和毫秒相互轉換的方法

    Java日期時間字符串和毫秒相互轉換的方法

    這篇文章主要為大家詳細介紹了Java日期時間字符串和毫秒相互轉換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringBoot+微信小程序實現(xiàn)文件上傳與下載功能詳解

    SpringBoot+微信小程序實現(xiàn)文件上傳與下載功能詳解

    這篇文章主要為大家介紹了SpringBoot整合微信小程序實現(xiàn)文件上傳與下載功能,文中的實現(xiàn)步驟講解詳細,快跟隨小編一起學習一下吧
    2022-03-03
  • Java concurrency之公平鎖(二)_動力節(jié)點Java學院整理

    Java concurrency之公平鎖(二)_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java concurrency之公平鎖的第二篇內容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java程序設計之12個經(jīng)典樣例

    Java程序設計之12個經(jīng)典樣例

    這篇文章主要給大家分享關于Java程序設計11個經(jīng)典樣例,主要以舉例的形式詳細的講解了Java程序設計的各種方法,需要的朋友可以參考一下文章具體的內容
    2021-10-10
  • IDEA項目的依賴(pom.xml文件)導入問題及解決

    IDEA項目的依賴(pom.xml文件)導入問題及解決

    這篇文章主要介紹了IDEA項目的依賴(pom.xml文件)導入問題及解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Jenkins系統(tǒng)如何進行數(shù)據(jù)備份

    Jenkins系統(tǒng)如何進行數(shù)據(jù)備份

    隨著我們的長期使用,Jenkins系統(tǒng)中的內容會越來越多,特別是一些配置相關的東西,不能有任何丟失。這個時候我們就需要定期備份我們的Jenkins系統(tǒng),避免一些誤操作不小心刪除了某些重要文件,本文就將介紹下Jenkins系統(tǒng)如何進行數(shù)據(jù)備份
    2021-06-06
  • Java Scala的隱式轉換詳解

    Java Scala的隱式轉換詳解

    隱式轉換是在Scala編譯器進行類型匹配時,如果找不到合適的類型,那么隱式轉換會讓編譯器在作用范圍內自動推導出來合適的類型。本文通過代碼示例介紹了Scala的隱式轉換,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • Java實現(xiàn)學生信息管理界面

    Java實現(xiàn)學生信息管理界面

    這篇文章主要為大家詳細介紹了Java實現(xiàn)學生信息管理界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論