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

Java中的接口及其應用場景解讀

 更新時間:2023年05月08日 17:12:26   作者:回水  
這篇文章主要介紹了Java中的接口及其應用場景解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、接口的特點

1.如果一個抽象類中的所有方法都是抽象的,則可以將這個類定義為Java中的另一種形式——接口。接口是一種特殊的抽象類,接口中只有全局常量和抽象方法,是一種更純粹的抽象概念。

2.在JDK8中,對接口進行了重新定義,接口中除了有抽象方法外,還可以有默認方法和靜態(tài)方法;默認方法可以被繼承和覆寫,靜態(tài)方法不能被繼承和覆寫。

3.一般來說,接口的使用表示兩種場景:

  • ①接口表示具備某種能力/行為,子類實現(xiàn)接口是并不是is a關系,而是具備這種能力或行為
  • ②接口表示一種規(guī)范或者標準。

4.在接口中,定義抽象方法時 public abstract關鍵字可以省略,定義全局常量時 static final可以省略。

5.接口的子類可以實現(xiàn)多個父接口,接口也不能直接實例化對象,需要通過子類(普通類)向上轉型。

6.接口和接口之間也可以是繼承關系,但是接口絕對不能繼承一個類。

二、定義接口

1.interface關鍵字

與定義類不同的是,在定義接口的時候,不再使用class關鍵字,而是使用interface關鍵字來聲明。

語法格式:修飾符 interface 接口名 { }

創(chuàng)建一個USB接口,里面有兩個抽象方法

代碼如下:

public interface USB{
//表示插入
	public abstract void plugIn();
//表示工作
	public abstract void work();
}

2.implements關鍵字

子類使用implements關鍵字來實現(xiàn)接口,必須覆寫接口中所有的抽象方法

代碼如下:

public class KeyBoard implements USB {
	@Override
    public void plugIn() {
        System.out.println("安裝鍵盤驅動");
    }
    @Override
    public void work() {
        System.out.println("鍵盤正常工作");
    }
}

三、應用場景

1.接口表示規(guī)范

USB接口表示一種規(guī)范,鼠標鍵盤耳機等等這些外設都屬于USB接口的子類,我們在日常生活中使用電腦的時候,我們并不關心到底哪個具體設備插入了我們的電腦,只要這個設備滿足了USB接口,就都能被電腦識別并使用。

就是說,一個接口,可以接受無數(shù)種設備,只要這個設備滿足USB接口,都可以插入電腦并被電腦識別。

兼容所有的USB子類對象。

public interface USB{
//表示插入
	public abstract void plugIn();
//表示工作
	public abstract void work();
}
public class Mouse implements USB{
    @Override
    public void plugIn() {
        System.out.println("安裝鼠標驅動");
    }
    @Override
    public void work() {
        System.out.println("鼠標正常工作");
    }
}
public class KeyBoard implements USB {
	@Override
    public void plugIn() {
        System.out.println("安裝鍵盤驅動");
    }
    @Override
    public void work() {
        System.out.println("鍵盤正常工作");
    }
}
public class Camera implements USB{
    @Override
    public void plugIn() {
        System.out.println("安裝相機驅動中");
    }
    @Override
    public void work() {
        System.out.println("相機開始正常工作");
    }
}
//電腦這個類不是USB接口的子類,他是USB規(guī)范的使用者
public class Computer {
    public static void main(String[] args) {
        Computer computer = new Computer();
        Mouse mouse = new Mouse();
        Keyboard keyboard = new Keyboard();
        Camera camera = new Camera();
        computer.fun(mouse);
        computer.fun(keyboard);
        computer.fun(camera);
    }
    /**
    *為什么此時fun方法的參數(shù)是USB usb呢?如果我們寫成fun(Mouse mouse),那么這個fun只能識別鼠標,其他的根本識別不了,我們得寫好多個方法去實現(xiàn)。
    *我們這里用他們共同的接口當做參數(shù),這樣不管傳進來的是什么設備,只要你實現(xiàn)了USB這個接口,那你就可以被識別
    *假設我們現(xiàn)在多了一個子類Earphone(耳機)類,實現(xiàn)了USB接口,那我們的fun方法里一行多的代碼都不用寫,直接實例化對象,將引用名傳進去就行。
    */
    public void fun(USB usb) {
        usb.plugIn();
        usb.work();
    }
}

2.接口表示能力/行為

接口允許多實現(xiàn),一個類可以具備多個能力,同時實現(xiàn)多個父接口,若實現(xiàn)多個父接口,子類(普通類),必須覆寫所有的抽象方法。

代碼如下:

//游泳接口,表示具備游泳這個行為
public interface ISwim {
? ? //可以省略public abstrac
//public abstract void swim();
? ? void swim();
}
//具備跑這個行為
public interface IRun {
//可以省略public abstrac
? ? void run();
//public abstract void run();
}
//表示能飛
public interface IFly {
//public abstract void fly();
//可以省略public abstrac
? ? void fly();
}
//只具備跑的行為
public class Rabbit implements IRun{
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("兔子在跑~");
? ? }
}
//具備跑和游泳的能力
public class Dog implements IRun,ISwim{
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("狗子在跑~");
? ? }
? ? @Override
? ? public void swim() {
? ? ? ? System.out.println("狗子在游泳~");
? ? }
}
//三種能力都具備
public class Duck implements IRun,ISwim,IFly{
? ? @Override
? ? public void fly() {
? ? ? ? System.out.println("鴨子在飛~");
? ? }
? ? @Override
? ? public void run() {
? ? ? ? System.out.println("鴨子在跑~");
? ? }
? ? @Override
? ? public void swim() {
? ? ? ? System.out.println("鴨子在游泳~");
? ? }
}
//定義一個測試類進行測試
public class Test {
? ? public static void main(String[] args) {
? ? ? ? IRun run = new Rabbit();
? ? ? ? IRun run1 = new Dog();
? ? ? ? ISwim swim = new Dog();
? ? ? ? IFly fly = new Duck();
? ? ? ? run.run();
? ? ? ? run1.run();
? ? ? ? swim.swim();
? ? ? ? fly.fly();
? ? }
}

運行結果如下:

四、接口和類之間的關系

接口和子類之間是一種混合關系,不具備is a關系。上面的Dog和Rabbit都具備跑的能力,但是這兩個類彼此之間沒啥關系。

1.當一個類實現(xiàn)接口時,如果這個類是抽象類,只需要實現(xiàn)接口種的部分抽象方法,如果是一個普通類,則需要覆寫接口中所有的抽象方法。

2.一個類可以實現(xiàn)多個接口,接口之間用英文逗號隔開。

3.接口之間可以通過extends關鍵字實現(xiàn)繼承,并且一個接口可以同時繼承多個接口,接口之間用英文逗號隔開。

4.一個類在繼承一個類的同時,還可以實現(xiàn)多個接口,此時,extends關鍵字必須位于implements關鍵字之前。

語法如下:

修飾符 class 類名 extends 父類名 implements 接口1,接口2{} 

public class Test {
}
interface IA{
//接口中抽象方法可以省略public abstract
    void testA();
}
interface IB{
    void testB();
}
//接口之間存在繼承關系,可以多繼承。
//接口堅決不能繼承一個類
interface IC extends IA,IB{
//IC接口同時繼承多個父接口,繼承了所有的抽象方法
//子類實現(xiàn)IC接口時,必須覆寫所有的抽象方法
}
class CImpl implements IC{
    @Override
    public void testA() {
    }
    @Override
    public void testB() {
    }
}
abstract class Person{
}
//一個類繼承一個類,同時實現(xiàn)多個接口
//修飾符 class 類名 extends 父類名 implements 接口1,接口2{}
class China extends Person implements IA,IB{
    @Override
    public void testA() {
    }
    @Override
    public void testB() {
    }
}

五、接口的命名規(guī)范

為了區(qū)分接口和類,命名使用 I 開頭,IRun,ISwim等等,子類實現(xiàn)一個接口時,命名以相應的接口開頭,以impl結尾。

例如:如果是IRun的子類,Runimpl(不是強制要求,但盡量做到)。

如果子類實現(xiàn)多個父接口,不需要使用此規(guī)范來命名

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論