《極限競速地平線5》車房寶物位置彙總
阿新 • • 發佈:2022-01-12
目錄
介面
一、基本介紹
介面就是給出一些沒有實現的方法,封裝到一起,到某個類要使用的時候,在根據具體情況把這些方法寫出來。
快速入門
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 介面{
自己屬性;
自己方法;
必須實現的介面的抽象方法;
}
小結:
- 在Jdk7.0前 接口裡的所有方法都是沒有方法體的,即都是抽象方法
- Jdk8.0後接口可以有靜態方法,預設方法,也就是說介面中可以有方法的具體實現
- 現在基本上都是用的jdk8.0等以後的版本
二、應用場景
- 把需要的功能/規格定下來,讓別人來具體實現即可
- 說現在有一個專案經理(段玉)管理三個程式設計師,功能開發一個軟體為了控制和管理軟體,專案經理可以定義一些介面,然後由程式設計師具體實現。(1.專案質量2.專案進度3.專案獎)參加工作
- 為了實現介面的統一呼叫
三、使用細節和注意事項
第一部分
- 介面不能被例項化
- 介面中所有的方法都是public方法,介面中抽象方法,可以不用abstract修飾
- 一個普通類實現介面,就必須將該介面的所有方法都實現
- 抽象類實現介面,可以不用實現介面的方法。
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{
}
第二部分
-
一個類同時可以實現多個介面
-
介面中的屬性,都是public static final 的
int n1 = 1
等價於public static final int n1 = 1
-
介面中屬性的訪問形式:介面名.屬性名
-
一個介面不能繼承其他的類,但是可以繼承多個別的介面
interface A extend B.c{``}
-
介面的修飾符 只能是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.介面在一定程度上實現程式碼耦合
即介面的規範性+動態的繫結機制
五、介面的多型性
-
多型引數,只要要傳入的物件實現了該形參的介面型別,就能通過使用
-
多型陣列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("相機斷開了.."); } }
-
介面型別的變數,可以指向實現了該介面的物件例項
六、介面的多型傳遞
即如果B介面繼承了A介面,C類(普通類)又實現了B介面,那麼A和B介面型別的變數都可以指向C類的物件例項