interface 關鍵字

更新於 發佈於 閱讀時間約 3 分鐘

在Java中

所有被宣告在interface中的method都是public abstract

所以interface中的method才不需要特地標上修飾符abstract


interface只體現設計方向

而如何實現此設計

就由class去 implements 此interface以實際override(重寫)

在interface中宣告的variable,預設都是final且static的
所以必須要賦予初始值


class 可以 implements 多個 interface

如下程式部分,假如Animal 和 Human 兩個interface都有eat method

那麼class Japanese implements時重寫的eat method 會直接override兩者的eat 行為

所以不會有像extends 繼承時出現不知道該參照誰的method的狀況發生

interface Animal {

void canSpeak(boolean can);

void eat();
}

interface Human {

void speak();

void eat();
}

class Japanese implements Human, Animal {

@Override
public void canSpeak(boolean can) {
System.out.println(can ? "can speak" : "can not speak");
}

@Override
public void speak() {
System.out.println("speak in japanese");
}

@Override
public void eat() {
System.out.println("eat something");
}
}


public class Demo {
public static void main(String[] args) {

Japanese human = new Japanese();
human.canSpeak(true); // can speak
human.speak(); // speak in japanese
human.eat(); // eat something

Japanese human2 = new Japanese();
human.canSpeak(false); // can not speak
human.speak(); // speak in japanese
human.eat(); // eat something
}
}


interface 可以 extends interface

interface A 繼承 interface B

那麼 class C implements A時,就需要將interface A和B的所有method都重寫

不然就是在class C 前方加上 abstract關鍵字,表示我有method不想重寫(我並不完整)


我的Java學習日記
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
abstract method 一定要在 abstract class裡面 abstract class裡面不一定要有abstract method
public: 可以在任何地方存取(access) private: 只能在同class中存取 default: 只能在同package中存取 protected: 只能在同package,以及它的子class存取。不能在不同package的非子class存取
Java不能同時多重繼承 但是可以多層繼承
表面上看似改變了,但底層記憶體中的值是沒有改變的。
每個method都有一個自己的stack Instance Variable 會存在heap中 Local Variable 會存在stack中
Switch陳述式在 Java 12 之前與之後的差別
abstract method 一定要在 abstract class裡面 abstract class裡面不一定要有abstract method
public: 可以在任何地方存取(access) private: 只能在同class中存取 default: 只能在同package中存取 protected: 只能在同package,以及它的子class存取。不能在不同package的非子class存取
Java不能同時多重繼承 但是可以多層繼承
表面上看似改變了,但底層記憶體中的值是沒有改變的。
每個method都有一個自己的stack Instance Variable 會存在heap中 Local Variable 會存在stack中
Switch陳述式在 Java 12 之前與之後的差別
你可能也想看
Google News 追蹤
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
本章節是Java入門的第八天,主要介紹物件導向的概念。這包括了類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、Lambda表達式、泛型和反射等主題。每個主題都配有相關的程式碼範例,以協助讀者更好地理解這些概念。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節旨在介紹Java程式語言中的各種資料型別,包括基本型別、引用型別、集合型別、陣列型別、字典型別等。它還講解了如何在Java中進行型別轉換和自定義型別,並提供了相關的程式碼示例。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
這篇文章的目的是對Java程式設計語言進行介紹,包括它的特性、應用範疇、主要使用者,以及相關的學習資源和常見的庫與框架。此外,它也提供了一些學習Java的渠道,以及與Java相關的其他知識。
※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
Thumbnail
default methods 似乎也引起不小的討論,因為 default methods 加上可以實作多個介面,已經有點像 C++ 的多重繼承了,只差在沒辦法繼承成員變數而已,是好是壞就看怎麼使用了。我個人覺得還蠻方便的
Thumbnail
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
本章節是Java入門的第八天,主要介紹物件導向的概念。這包括了類別、建構子、存取修飾子、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、Lambda表達式、泛型和反射等主題。每個主題都配有相關的程式碼範例,以協助讀者更好地理解這些概念。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
此章節的目的是介紹Java程式語言中的流程控制結構,包括條件語句(if, else if, else)、三元運算子、switch語句,以及各種迴圈(for, foreach, while)。同時,也解釋了如何在迴圈中使用控制語句來改變程式的執行流程。每種主題都配有示例程式碼以幫助理解。
Thumbnail
此章節旨在介紹Java程式語言中的各種資料型別,包括基本型別、引用型別、集合型別、陣列型別、字典型別等。它還講解了如何在Java中進行型別轉換和自定義型別,並提供了相關的程式碼示例。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
這篇文章的目的是對Java程式設計語言進行介紹,包括它的特性、應用範疇、主要使用者,以及相關的學習資源和常見的庫與框架。此外,它也提供了一些學習Java的渠道,以及與Java相關的其他知識。
※ TypeScript範例說明: interface ITest { test1: string test2: number print: (arg: string[]) => boolean } class Test implements ITest { public te
※ OPP第三大核心-多型 ※ 多型的基本定義: 多型是利用繼承的特性,讓不同的子類別可以實現相同的介面,但在呼叫這些介面的方法時會表現出不同的行為。這使得程式設計更具彈性和擴展性,避免了複雜的條件判斷式,同時促進了代碼的重用。 class Animal { makeSound() {
Thumbnail
default methods 似乎也引起不小的討論,因為 default methods 加上可以實作多個介面,已經有點像 C++ 的多重繼承了,只差在沒辦法繼承成員變數而已,是好是壞就看怎麼使用了。我個人覺得還蠻方便的
Thumbnail
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。