1. 程式人生 > 遊戲攻略 >《極限競速地平線5》車房寶物位置彙總

《極限競速地平線5》車房寶物位置彙總

目錄

介面

一、基本介紹

介面就是給出一些沒有實現的方法,封裝到一起,到某個類要使用的時候,在根據具體情況把這些方法寫出來。

快速入門

UsbInterface 介面

package com.hspedu.interface_;


public interface UsbInterface {//介面
    //規定介面的相關方法
    //這些都是人為規定的規定的,即規範..
    public void start();
    public void stop();
}

Phone.class

package com.hspedu.interface_;

//Phone 類 實現UsbInterface 介面
//解讀1. 即 Phone 類需要實現 UsbInterface 規定/宣告的方法
public class Phone implements UsbInterface {
    @Override
    public void start() {
        System.out.println("手機開始工作..");
    }

    @Override
    public void stop() {
        System.out.println("手機停止工作..");
    }
}

Camera.class

package com.hspedu.interface_;

public class Camera implements UsbInterface{//實現介面,本質就是把介面的方法實現

    @Override
    public void start() {
        System.out.println("相機開始工作..");
    }

    @Override
    public void stop() {
        System.out.println("相機停止了工作..");
    }
}

Computer.class

package com.hspedu.interface_;

public class Computer {
    //編寫一個方法,計算機工作
    public void work(UsbInterface usbInterface){
        //通過介面,來呼叫方法
        usbInterface.start();
        usbInterface.stop();
    }
}

Interface01.java

package com.hspedu.interface_;

public class Interface01 {
    public static void main(String[] args) {
        //建立相機物件
        Camera camera = new Camera();
        Phone phone = new Phone();
        Computer computer = new Computer();
        computer.work(phone);//把手機接入到計算機
        computer.work(camera);//把相機接入到計算機

    }
}
//輸出結果
//手機開始工作..
//手機停止工作..
//相機開始工作~~
//相機停止了工作~~

語法:

interface 介面{
	//屬性
    //方法:分為以下三種
    1.抽象方法
    2.預設實現方法
    3.靜態方法    
}

class 類名 implement 介面{
	自己屬性;
    自己方法;
    必須實現的介面的抽象方法;
}

小結:

  1. 在Jdk7.0前 接口裡的所有方法都是沒有方法體的,即都是抽象方法
  2. Jdk8.0後接口可以有靜態方法,預設方法,也就是說介面中可以有方法的具體實現
    • 現在基本上都是用的jdk8.0等以後的版本

二、應用場景

  1. 把需要的功能/規格定下來,讓別人來具體實現即可
  2. 說現在有一個專案經理(段玉)管理三個程式設計師,功能開發一個軟體為了控制和管理軟體,專案經理可以定義一些介面,然後由程式設計師具體實現。(1.專案質量2.專案進度3.專案獎)參加工作
    • 為了實現介面的統一呼叫

三、使用細節和注意事項

第一部分

  1. 介面不能被例項化
  2. 介面中所有的方法都是public方法,介面中抽象方法,可以不用abstract修飾
  3. 一個普通類實現介面,就必須將該介面的所有方法都實現
  4. 抽象類實現介面,可以不用實現介面的方法。
package com.hspedu.interface_;

public class InterfaceDetail01 {
    public static void main(String[] args) {
//        new IA();
    }
}

//1.介面不能被例項化
//2.介面中的所有的方法是public方法,抽象方法abstract關鍵字可以省略
//3.一個普通類實現介面,就必須把介面中的抽象方法全部實現,可以使用alt+enter來解決
//4.抽象類去實現介面時,可以不實現介面的抽象方法
interface IA{
    void say();
    void hi();
}

class Cat implements IA{

    @Override
    public void say() {

    }

    @Override
    public void hi() {

    }
    //可以使用alt+enter來解決
}

abstract class Tiger implements IA{
     
}

第二部分

  1. 一個類同時可以實現多個介面

  2. 介面中的屬性,都是public static final 的

    • int n1 = 1等價於public static final int n1 = 1
  3. 介面中屬性的訪問形式:介面名.屬性名

  4. 一個介面不能繼承其他的類,但是可以繼承多個別的介面

    • interface A extend B.c{``}
  5. 介面的修飾符 只能是public 和預設,這點和類的修飾符一樣

    package com.hspedu.interface_;
    
    public class InterfaceDetail02 {
        public static void main(String[] args) {
            System.out.println(IB.n1);//證明 n1是靜態的
    //        IB.n1 = 200; 證明n1是不可以修改的常量,final來修飾的
    //        Cannot assign a value to final variable 'n1'
        }
    }
    
    //一個介面不能繼承其他的類,但是可以繼承多個別的介面
    interface ID extends IB,IC{
    
    }
    
    interface IB{
        int n1 = 100; //=> public static final int n1 = 10;
        void hi();
    }
    
    interface IC{
        void cry();
    }
    
    //一個類可以同時實現多個介面
    class Pig implements IB,IC{
    
        @Override
        public void hi() {
    
        }
    
        @Override
        public void cry() {
    
        }
    }
    

四、介面和繼承的區別

小結:當子類繼承了父類,就擁有了父類的一些功能,如果子類需要擴張功能,就能實現介面的方式來擴充套件

  • 可以理解 實現介面 是Java 單繼承機制的一種補充

1.繼承和介面解決的問題不同

繼承的價值主要在於:解決程式碼的複用性和可維護性

介面的價值主要在於:設計,設計好各種規範(方法),讓其他類去實現這些方法。即更加靈活

2.介面比繼承更加靈活

介面比繼承更加靈活,繼承滿足is-a的關係,而介面只需滿足like-a的關係

3.介面在一定程度上實現程式碼耦合

即介面的規範性+動態的繫結機制


五、介面的多型性

  1. 多型引數,只要要傳入的物件實現了該形參的介面型別,就能通過使用

  2. 多型陣列InterfacePolyArr.java
    演示一個案例:給Usb陣列中,存放 Phone 和相機物件,Phone類還有一個特有的方法call),請遍歷Usb陣列,如果是Phone物件,除了呼叫Usb 介面定義的方法外,還需要呼叫Phone特有方法call.

    package com.hspedu.interface_;
    
    public class InterfacePolyArr {
        public static void main(String[] args) {
            //多型陣列 -> 介面型別的陣列
            MyUsb [] myUsb = new MyUsb[2];
            myUsb[0] = new Phone_();
            myUsb[1] = new Camera_();
            for (int i = 0; i < myUsb.length; i++) {
                myUsb[i].start();//動態繫結
                myUsb[i].end();//動態繫結
                if (myUsb[i] instanceof Phone_){//判斷它的執行型別是什麼
                    ((Phone_)myUsb[i]).cal();
                }
                System.out.println();
            }
    
        }
    
    }
    
    interface MyUsb{
        int n1 = 100;
        void start();
        void end();
    }
    
    class Phone_ implements MyUsb{
        public int n2 = 200;
        @Override
        public void start() {
            System.out.println("手機連線上了..");
        }
    
        @Override
        public void end() {
            System.out.println("手機斷開了..");
        }
    
        public void cal(){
            System.out.println("我是手機..");
        }
    }
    
    class Camera_ implements MyUsb{
        public int n1 = 200;
        @Override
        public void start() {
            System.out.println("相機連線上了..");
        }
    
        @Override
        public void end() {
            System.out.println("相機斷開了..");
        }
    }
    
  3. 介面型別的變數,可以指向實現了該介面的物件例項


六、介面的多型傳遞

即如果B介面繼承了A介面,C類(普通類)又實現了B介面,那麼A和B介面型別的變數都可以指向C類的物件例項