Java學習筆記10(物件導向三:介面),java學習筆記

來源:互聯網
上載者:User

Java學習筆記10(物件導向三:介面),java學習筆記

介面:

暫時可以理解為是一種特殊的抽象類別

介面是功能的集合,可以看作是一種資料類型,是比抽象類別更抽象的“類”

介面只描述所應該具備的方法,並沒有具體實現,具體實現由介面的實作類別(相當於介面的子類)來完成

這樣將功能的實現與定義分離,最佳化了程式設計

介面的成員方法全抽象,不能存在帶有方法體的方法

介面中無法定義普通的成員變數,必須定義為常量

介面定義抽象方法有固定格式

一切事物皆有功能,即一切事物都有介面

介面的定義規則:

public interface MyInterface {    public static final int a = 1;    public abstract void function();}

 

介面的實作類別(類和類之間叫繼承,類和介面之間叫實現):

public class MyInterfaceImpl implements MyInterface{    public void function(){        System.out.println("實作類別,重寫介面方法");    }}

測試:

public class Test {    public static void main(String[] args) {        MyInterfaceImpl my = new MyInterfaceImpl();        my.function();    }}

 

 

介面中成員變數的特點:

注意這裡的public static final三個修飾詞可以省略任意個數,但是效果不變,總是public static final,建議寫全

public interface MyInter {    //靜態可以用.方式訪問    //final表示不能被修改    public static final int x = 3;    }

測試:

public class Test {    public static void main(String[] args) {        //靜態可以用.方式訪問,具體關於static在後邊講        System.out.println(MyInter.x);    }}

 

介面中成員方法的特點:

注意這裡的public abstract也是選擇性書寫的,無論怎樣效果都是public abstract,建議寫全

public interface MyInter {    public abstract void function();}

 

 

實作類別,實現介面,重寫介面全部抽象方法,建立實作類別對象

介面不可以建立對象

子類必須覆蓋掉介面中所有的抽象方法後,子類才可以執行個體化,否則子類是一個抽象類別

 

介面的多實現:

介面最重要的體現:解決多繼承的弊端,將多繼承這種機制在java中通過多實現完成了

解決安全隱患原理:介面中的方法全都是抽象的,沒有主體,方法依賴實作類別的重寫才可以實現,因此沒有安全問題

因此介面的多實現解決了單繼承的局限性

舉例:

介面A:

public interface A {    public abstract void a();    public abstract void c();}

介面B:

public interface B {    public abstract void a();    public abstract void b();}

多實現:

/* * 類C,同時實現兩個介面,介面A,B * 作為實作類別,C必須重寫兩個介面的所有抽象方法,才可以建立C類對象 * */public class C implements A, B {    public void a() {    }    public void b() {    }    public void c() {    }}

 

類繼承類的同時,還可以實現介面:

類D:

public abstract class D {    public abstract void d();}

C:

//在繼承一個類(只能是一個)的同時,實現多個介面public class C extends D implements A, B {    public void a() {    }    public void b() {    }    public void c() {    }    public void d() {    }}

 

介面存在多繼承:

由於介面的方法都是抽象的,所以不存在安全隱患

public interface A {    public abstract void a();}
public interface B {    public abstract void b();}
public interface C extends A,B{    public abstract void c();}
public class D implements C{    public void a(){}    public void b(){}    public void c(){}}

 

 

這裡有一個有關java的問題:

java中到底存在多繼承嗎?

答:類沒有多繼承,介面之間存在多繼承

 

 

介面的思想:

舉例:電腦上有多個插口,這些插口可以插入相應的裝置,因為這些裝置生產的時候符合了這個插口的使用規則,否則無法插入使用

介面在開發中的好處:

1.介面的出現擴充了功能

2.介面其實就是暴漏出來的規則

3.介面的出現降低了耦合性,裝置與裝置之間實現瞭解耦(膝上型電腦USB插口是否被使用電腦都可以運行)

 

 

介面和抽象類別的共同點:

1.都位於繼承的頂端,用於被其他類實現或繼承

2.都不能直接執行個體化對象

3.都包含抽象方法,其子類都必須覆寫這些抽象方法

 

區別:

1.抽象類別為部分方法提供實現,避免子類重複實現這些方法,提高代碼的重用性;而介面只能包含抽象方法

2.一個類只能繼承一個直接父類(可能是抽象類別),卻可以實現多個介面,介面彌補了java的單繼承

 

思想方面的區別:

抽象類別是這個事物中應該具備的內容,繼承體系是一種is..a的關係

介面是這個事物中的額外內容,繼承體系是一種like...a的關係

虛擬碼舉例:class 賊 extends 人 implements 偷盜

賊本身是一個人,他可以偷盜,不是所有的人都偷盜

 

選用:

1.優先使用介面,盡量少用抽象類別

2.需要定義子類的行為,又要為子類提供共性功能時,選用抽象類別

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.