JAVA面向對象

Java 繼承

繼承的特性

子類擁有父類非private的屬性,方法。java

子類能夠擁有本身的屬性和方法,即子類能夠對父類進行擴展。ide

Java子類能夠用本身的方式實現父類的方法。函數

繼承是單繼承,可是能夠多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,因此按照關係就是C類是B類的父類,B類是A類的父類,這是java繼承區別於C++繼承的一個特性。this

提升了類之間的耦合性(繼承的缺點,耦合度高就會形成代碼之間的聯繫)。spa

繼承關鍵字

繼承可使用 extends implements 這兩個關鍵字來實現繼承,並且全部的類都是繼承於 java.lang.Object.net

super 關鍵字

· 調用父類的構造方法; 設計

· 調用父類的方法(子類覆蓋了父類的方法時); 對象

· 訪問父類的數據域。 繼承

注意:super 語句必須是子類構造方法的第一條語句。不能在子類中使用父類構造方法名來調用父類構造方法。 父類的構造方法不被子類繼承。調用父類的構造方法的惟一途徑是使用 super 關鍵字,若是子類中沒顯式調用,則編譯器自動將 super(); 做爲子類構造方法的第一條語句。這會造成一個構造方法鏈。 接口

靜態方法中不能使用 super 關鍵字。(this和super是須要對象才能夠調用的,靜態方法是屬於類的,沒有實例化的對象

 

只要是new子類,不管是調用子類的有參構造仍是無參構造都會執行父類的無參構造。當子類和父類有同一個變量名字的變量時(變量不會重寫),若是是使用了多態則調用的是父類的變量。不然調用的是子類的變量。方法則會被重寫

補充:執行順序,靜態塊>構造語句塊>函數塊

 

例子:

public class A {    

    public int a = 0;

    public void fun(){

        System.out.println("-----A-----");

    }

}

public class B extends A{

    public int a = 1;

    public void fun(){

        System.out.println("-----B-----");

    }

public static void main(String[] args){

        A classA = new B();     

        System.out.println(classA.a);

        classA.fun();

    }   

}

輸出結果爲:

0

-----B-----

重寫(Override)與重載(Overload)

重寫是子類對父類的容許訪問的方法的實現過程進行從新編寫, 返回值和形參都不能改變。

重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常(只能拋出父類異常或其子異常)

若是不能繼承一個方法,則不能重寫這個方法。

構造方法不能被重寫。

聲明爲final的方法不能被重寫。

訪問權限不能比父類中被重寫的方法的訪問權限更低。

 

重載規則

被重載的方法必須改變參數列表(參數個數或類型或順序不同)

被重載的方法能夠改變返回類型;

被重載的方法能夠改變訪問修飾符;

被重載的方法能夠聲明新的或更廣的檢查異常;

方法可以在同一個類中或者在一個子類中被重載。

沒法以返回值類型做爲重載函數的區分標準

Java 多態

多態分兩種:

(1)   編譯時多態(設計時多態):方法重載。

(2)   運行時多態:JAVA運行時系統根據調用該方法的實例的類型來決定選擇調用哪一個方法則被稱爲運行時多態。(咱們平時說得多的事運行時多態,因此多態主要也是指運行時多態)一個接口,多個方法

運行時多態存在的三個必要條件:

1、要有繼承(包括接口的實現);
2、要有重寫;
3、父類引用指向子類對象。

當使用多態方式調用方法時,首先檢查父類中是否有該方法,若是沒有,則編譯錯誤;若是有,再去調用子類的同名方法。

多態的好處

Ø 可替換性:多態對圓Circle類工做,對其餘任何圓形幾何體,如圓環,也一樣工做。

Ø 可擴充性:在實現了圓錐、半圓錐以及半球體的多態基礎上,很容易增添球體類的多態性。

Ø 接口性:向子類提供了一個共同接口,由子類來完善或者覆蓋它而實現的。

Ø 靈活性:它在應用中體現了靈活多樣的操做,提升了使用效率。

Ø 簡化性:

 

抽象類總結

Ø 抽象類不能被實例化

Ø 抽象類中不必定包含抽象方法,可是有抽象方法的類一定是抽象類。

Ø 抽象類中的抽象方法只是聲明,不包含方法體,就是不給出方法的具體實現也就是方法的具體功能。

Ø 構造方法,類方法(用static修飾的方法)不能聲明爲抽象方法。

Ø 抽象類的子類必須給出抽象類中的抽象方法的具體實現,除非該子類也是抽象類。

Java 封裝

 

封裝是面向對象方法的重要原則,就是把對象的屬性和操做(或服務)結合爲一個獨立的總體,並儘量隱藏對象的內部實現細節。

 

Java 接口

是抽象方法的集合,接口一般以interface來聲明

接口特性

Ø 接口中每個方法也是隱式抽象的,接口中的方法會被隱式的指定爲 public abstract(只能是 public abstract,其餘修飾符都會報錯)。

Ø 接口中能夠含有變量,可是接口中的變量會被隱式的指定爲 public static final 變量(而且只能是 public,用 private 修飾會報編譯錯誤。

Ø 接口中的方法是不能在接口中實現的,只能由實現接口的類來實現接口中的方法。

 

抽象類和接口的區別

Ø 抽象類中的方法能夠有方法體,就是能實現方法的具體功能,可是接口中的方法不行。

Ø 抽象類中的成員變量能夠是各類類型的,而接口中的成員變量只能是 public static final 類型的。

Ø 接口中不能含有靜態代碼塊以及靜態方法(static 修飾的方法),而抽象類是能夠有靜態代碼塊和靜態方法。

Ø 一個類只能繼承一個抽象類,而一個類卻能夠實現多個接口。

相關文章
相關標籤/搜索