接口(上篇)

接口(上篇)

  • 1.概念
  • 2.語法規則
  • 3.使用和特性
  • 4.實現多接口
  • 5.接口間繼承

1.概念

接口就是公共的行為規范標準,大家在實現時,
只要符合規范標準,就可以通用。
在Java中,接口可以看成是:多個類的公共規范,是一種引用數據類型

2.語法規則

接口的定義格式與定義類的格式基本相同,
將class關鍵字換成 interface 關鍵字,就定義了一個接口

3.使用和特性

接口不能直接使用,必須要有一個"實現類"來"實現"該接口,
實現接口中的所有抽象方法

  1. 接口類型是一種引用類型,但是不能直接new接口的對象
  2. 接口中每一個方法都是public的抽象方法,
    即接口中的方法會被隱式的指定為 public abstract
  3. 接口中的方法是不能在接口中實現的,只能由實現接口的類來實現
  4. 重寫接口中方法時,不能使用默認的訪問權限
  5. 接口中可以含有變量,
    但是接口中的變量會被隱式的指定為 public static ?nal 變量
  6. 接口中不能有靜態代碼塊和構造方法
  7. 接口雖然不是類,但是接口編譯完成后字節碼文件的后綴格式也是.class
  8. 如果類沒有實現接口中的所有的抽象方法,則類必須設置為抽象類
  9. jdk8中:接口中還可以包含default方法
public class Computer {public void powerOn() {System.out.println("打開電腦...");}public void powerOff() {System.out.println("關閉電腦.....");}public void useDevice(IUSB iusb) {iusb.openDevice();if(iusb instanceof KeyBoard ) {KeyBoard keyBoard = (KeyBoard)iusb;keyBoard.input();}if(iusb instanceof Mouse) {Mouse mouse = (Mouse)iusb;mouse.click();}iusb.closeDevice();}
}
public interface IUSB {void openDevice();void closeDevice();//public abstract
}
public class KeyBoard implements IUSB{@Overridepublic void openDevice() {System.out.println("打開鍵盤服務....");}public void input() {System.out.println("鍵盤輸入數據.....");}@Overridepublic void closeDevice() {System.out.println("關閉鍵盤服務....");}
}
public abstract class MicroPhone implements IUSB{public abstract void test();
}class ITest extends MicroPhone {@Overridepublic void openDevice() {}@Overridepublic void closeDevice() {}@Overridepublic void test() {}
}
public class Mouse implements IUSB{@Overridepublic void openDevice() {System.out.println("打開鼠標服務...");}public void click() {System.out.println("點擊鼠標.....");}@Overridepublic void closeDevice() {System.out.println("關閉鼠標服務...");}
}
public class Test {public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();computer.useDevice(new KeyBoard());computer.useDevice(new Mouse());computer.powerOff();}}

4.實現多接口

在Java中,類和類之間是單繼承的,一個類只能有一個父類,
即Java中不支持多繼承,但是一個類可以實現多個接口

public abstract class Animal {public String name;public int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();//如果把 跑   游泳    飛  這些功能寫到這里面 可以不可以   1:可以  2:不可以  -》 2// 不是所有的動物 都具備 這些功能
}
public class Bird extends Animal implements IFlyable{public Bird(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+" 正在吃鳥糧....");}@Overridepublic void fly() {System.out.println(this.name+" 正在飛....");}
}
public class Dog extends Animal implements ISwimmable,IRunable {public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+" 正在吃狗糧.....");}@Overridepublic void run() {System.out.println(this.name+" 正在跑...");}@Overridepublic void swim() {System.out.println(this.name+" 正在游泳...");}}
public class Duck extends Animal implements IFlyable,IRunable,ISwimmable{public Duck(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+" 正在鴨糧....");}@Overridepublic void fly() {System.out.println(this.name+" 正在飛....");}@Overridepublic void run() {System.out.println(this.name+" 正在跑....");}@Overridepublic void swim() {System.out.println(this.name+" 正在游泳....");}
}
public interface IFlyable {void fly();
}
public interface IRunable {void run();
}
public interface ISwimmable {void swim();
}
public class Robot implements IRunable{@Overridepublic void run() {System.out.println("機器人在跑.....");}
}
public class TestDemo {public static void walk(IRunable runable) {runable.run();}public static void swim(ISwimmable iSwimmable) {iSwimmable.swim();}public static void fly(IFlyable iFlyable) {iFlyable.fly();}public static void main(String[] args) {Bird bird = new Bird("小鳥·",3);Dog dog = new Dog("小狗",13);Duck duck = new Duck("小鴨",5);Robot robot = new Robot();walk(duck);walk(dog);walk(robot);System.out.println("=====");swim(duck);swim(dog);System.out.println("====");fly(duck);fly(bird);}public static void eatFun(Animal animal) {animal.eat();}}

5.接口間繼承

在Java中,類和類之間是單繼承的,一個類可以實現多個接口,接口與接口之間可以多繼承

interface A {void testA();
}
interface B {void testB();
}
//extends 拓展
interface C extends A,B {void testC();
}public class TestDemo2 implements C{@Overridepublic void testA() {}@Overridepublic void testB() {}@Overridepublic void testC() {}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90465.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90465.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90465.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5 源碼編譯setup.bat報錯

文章目錄編譯報錯改動說明小結更新編譯報錯 改動說明 因為需要整服務器,就編譯源碼,然后就遇到這個,很無語。這個問題一直存在,UE官方也不修復,也算是修復了,只是每次都要去重新下載替換下。也可以去問問d…

Linux下PCIe子系統(二)——PCIe子系統框架詳解

Linux下PCIe子系統(二)——PCIe子系統框架詳解 1. 概述 PCIe(PCI Express)子系統是Linux內核中負責管理PCI/PCIe設備的核心組件。它提供了一套完整的框架來發現、配置和管理PCI設備,實現了設備的即插即用和熱插拔功能。…

[特殊字符] LLM(大型語言模型):智能時代的語言引擎與通用推理基座

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 從千億參數到人類認知的AI革命 🔍 一、核心定義與核心特征…

18-C#改變形參內容

C#改變形參內容 1.ref 參數 int A100; add1(ref A) public int add1 (ref int x) {x x 10;return x; }2.out 參數 int A100; int B200; int Z; add3(A,B, out Z) public int add3 (int x,int y,int z) {z x y;return z; }

恒盾C#混淆加密大師最新版本1.4.0更新 - 增強各類加密效果, 提升兼容性, 使.NET加密更簡單

C#/.NET作為托管語言, 其編譯生成的EXE/DLL極易被反編譯工具還原源碼。據統計,大量的商業軟件曾遭遇過代碼逆向風險,導致核心算法泄露、授權被跳過. 因此對于C#語言開發的.NET程序來說, 在發布前進行混淆和加密非常有必要. 恒盾C#混淆加密大師作為一款.N…

數學建模:非線性規劃:二次規劃問題

一、定義如果規劃模型的目標函數是決策向量的二次函數,約束條件都是線性的,那么這個模型稱為二次規劃(QP)模型。二次規劃模型的一般形式為二、性質凸性判定準則二次規劃問題的凸性完全由Hessian矩陣H決定:??嚴格凸QP…

4. 那在詳細說一下 http 2.0 的特點

總結 二進制協議:文本通信改為二進制幀通信,數據可以劃分為更小的幀,便于高效解析和傳輸。多路復用:廢除 pipeline 管道,避免了“隊頭阻塞”問題。允許同一個 TCP 連接同時發送多個請求和協議,提高網絡資源…

Qt中遍歷QMap的多種方法及性能分析

Qt中遍歷QMap的多種方法及性能分析遍歷QMap的方法**1、使用迭代器&#xff08;STL風格&#xff09;****2、使用Java風格迭代器****3、使用C11范圍循環****4、使用鍵值分離遍歷**性能分析使用建議遍歷QMap的方法 1、使用迭代器&#xff08;STL風格&#xff09; QMap<QStrin…

Unity3D物理引擎性能優化策略

前言 在Unity3D中優化物理引擎性能&#xff0c;尤其是處理3D碰撞器與2D碰撞器的映射問題&#xff0c;需要結合系統特性和最佳實踐。以下是關鍵策略和實現方案&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小組&#xff0c;希望大家可以點擊進來一起交流一下開發經驗呀…

集群與集群應用

負載均衡與高可用綜合實驗一、集群是什么&#xff1f;是有一組獨立的計算機系統構成的一個松耦合的多處理系統&#xff0c;作為一個整體向用戶提供一組網絡資源&#xff0c;這些單個的計算機就是集群的節點。二、集群類型Load Balance cluster&#xff08;負載均衡集群&#xf…

jmm,`as - if - serial` 與 `happens - before` 原則

在Java并發編程中&#xff0c;as - if - serial 與 happens - before 原則是確保程序在多線程環境下正確執行的重要規則&#xff0c;下面為你詳細講解&#xff1a; as - if - serial原則 定義&#xff1a;as - if - serial 原則是指&#xff0c;不管編譯器和處理器如何優化&…

主流大模型Agent框架 AutoGPT詳解

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 GPT多模態大模型與AI Agent智能體書籍本章配套視頻課程【陳敬雷】 文…

kotlin學習,val使用get()的問題

疑問&#xff1a;定義val怎么還能使用get()代碼示例&#xff1a;private val nametype:Intget()Business.carInfo?.let{carSc(it)}?:LType.AS回答&#xff1a;Kotlin 允許為屬性定義自定義 getter&#xff0c;每次訪問屬性時會執行該方法疑問&#xff1a;這里引出另一個不解&…

解決el-select數據類型相同但是顯示數字的問題

這個不是我寫的&#xff0c;只是遇到的bug&#xff0c;寫法問題&#xff0c;忽略了值的綁定的問題源代碼bug&#xff1a;<el-selectv-model"schemeInfo.horizon"placeholder"請選擇起報月份"clearablefilterable><el-option v-for"(option,i…

熟練掌握RabbitMQ和Kafka的使用及相關應用場景。異步通知與解耦,流量削峰,配合本地消息表實現事務的最終一致性并解決消息可靠、順序消費和錯誤重試等問題

RabbitMQstock.#.nyse &#xff0c;#匹配多個字符&#xff0c;*匹配一個字符。 Confirm Callback 到達exchange的回調。 Return Callback 到達queue失敗的回調。 Kafka Kafka生產端分區器&#xff1a; 1.直接指定partition 指定0,1。 2.設置hashkey&#xff0c;計算key的hash值…

飛算科技:以原創技術賦能數字轉型

在數字科技迅猛發展的浪潮中&#xff0c;飛算數智科技&#xff08;深圳&#xff09;有限公司&#xff08;簡稱 “飛算科技”&#xff09;作為一家自主創新型的數字科技公司&#xff0c;同時也是國家級高新技術企業&#xff0c;正以扎實的技術實力和豐富的實踐經驗&#xff0c;在…

基于 Rust 的Actix Web 框架的應用與優化實例

基于 Rust 的Actix Web 框架的應用與優化實例 Actix Web 框架概述 Actix Web 是一個基于 Rust 的高性能、輕量級 Web 框架,構建于 Actix 異步運行時之上。它支持異步編程模型,適合構建高并發、低延遲的 Web 服務和 API。 核心特性 異步支持:基于 async/await 語法,充分利…

springMVC01-特點、創建項目、@RequestMapping、獲取參數請求,三種域對象

一、簡介 SpringMVC 就是 Spring 框架中的 MVC 模塊&#xff0c;用于構建 Web 應用中的“控制層”。 SpringMVC 是 Spring 提供的一個基于 Servlet 的 Web MVC 框架模塊&#xff0c;是 Spring 整個體系中的“Web 層核心”。 SpringMVC 是 Spring 的一部分&#xff0c;Spring…

Java基礎,反射破壞封裝性 - 單例模式的崩塌

目錄一、容易出現問題的小李代碼小李的單例設計看似完美&#xff0c;實則存在三個致命問題&#xff1a;1、反射攻擊的天然漏洞2、序列化的隱患3、性能瓶頸二、隔壁老王的優化方案三、為什么這樣優化&#xff1f;四、小結周五下午&#xff0c;代碼審查會議上&#xff0c;小李自信…

Neo4j 綜合練習作業

Neo4j 綜合練習作業 作業說明 這個作業涵蓋了 Neo4j 的多個重要知識點&#xff0c;包括節點和關系的創建、查詢、更新、刪除以及高級查詢功能。請使用 Cypher 語句完成以下所有題目。 數據準備 首先執行以下語句創建示例數據&#xff1a; ACTED_IN: 表示出演關系 DIRECTED: 表示…