Java之繼承

來源:互聯網
上載者:User

標籤:空間   技術分享   ext   執行   原則   int   class   變數   override   

Java的第二大特性-----》繼承

一、什麼是繼承

   繼承就是有一個類與另一個類的關係,也可以說一個類擁有另一個類的開放的屬性和方法。舉例說明就是,兒子繼承父親的資產,那麼他便可以享用父親提供給他的便利。繼承中可以體現出來的是代碼的複用,子類可以直接用父類定義的屬性和方法。注意:java中是單繼承 .   使用的方式是extends關鍵字

如下:

public class Dog extends Animal{    }
public class Initial {    public static void main(String [] args){        Dog dog=new Dog();    }}

 

    這便是一個繼承,動物類是父類,Dog類是子類,繼承了動物類,並且在Dog類中沒有任何的代碼語句,可以在主類中new 一個Dog對象出來,就是繼承的好處所在了。

那麼,問題來了。。。。

如果子類需要的方法父類提供不了怎麼辦?

那就是方法的重寫

二、繼承之方法的重寫

              a. 當子類所需要的父類給予不了,那麼子類必須自力更生,自己實現父類的方法,當然這裡也有就近原則,重寫後的方法會被優先調用。沒有規矩,不成方圓

               重寫的規則:重寫的方法傳回值類型、方法名、參數都要相同

                

 

            b.舉例說明方法的重寫

              Object是所有類的父類,想當於鼻祖之類的,如果有類沒有使用extends關鍵字,那麼預設的繼承的Object.

Object中有兩個方法比較有名,toString方法和equals方法

i).Object 中的 toString()方法輸出的是雜湊碼值(對象地址字串),用來唯一區分對象相當於人的社會安全號碼,利用雜湊演算法產生的,前部分是包名,後部分是對象在記憶體的地址,然後我們平時輸出最多的字串就是轉換成字串,那麼我們可以重寫toString

   

ii).Object 中的equals方法是比較的兩個引用是否指向同一塊記憶體地區,Dog dog =new Dog()中的 dog 其實是一個引用,並不是一個被建立的對象,這裡只是把對象的引用賦給了變數dog,但是我們平時進行的比較都是比較的兩個對象的值是否一樣,不會i去比較是否指向了同一塊地區,所以我們需要重寫equals方法

public class Initial{    public static void main(String [] args){        Dog dog=new Dog();        Dog dog2=new Dog();        if(dog.equals(dog2)){            System.out.println("兩個對象是相同的");        }else{            System.out.println("兩個對象是不相同的");        }

  

這裡new 了兩次意思就是建立了兩個地址空間,那麼肯定是不同的

這裡重寫了equals方法,進行判斷兩個對象的值是否相同

 @Override    public boolean equals(Object obj) {        if(this==obj)            return true;        if(obj==null)            return false;        if(obj.getClass()==obj)            return true;        Dog other=(Dog)obj;        if(other.age!=((Dog) obj).age)            return false;        return true;    }

  

當然了,方法的重寫是按需要的,所有的重寫的方法都不一定是一樣的。

 三、繼承的初始化順序

父類有構造方法、屬性,子類也有構造方法和屬性,那麼到底他們是怎麼樣的初始化順序的呢?

 

 

          從上面的例子可以看出來,當new 一個Dog的時候,會先執行父類的構造方法,再執行子類的構造方法;而構造方法和屬性的初始化卻是先執行的屬性的初始化,再執行構造方法的初始化(先執行的被覆蓋了,結果中便是後執行的)。所以他們的初始化的順序是:

         父類的屬性初始化-----》父類的構造方法初始化--------》子類的屬性初始化---------》子類的構造方法初始化

四、繼承之final關鍵字

  final 關鍵字可以修飾類、方法、屬性、變數

a.當final 修飾類時表示這個類不能被繼承

b.當final 修飾方法時表示這個方法不能被重寫(覆蓋)

c.當final 修飾屬性時,在聲明的時候和構造方法中須有一處對其進行初始化,不然的話編譯器會報錯(編譯器會對普通的屬性或者變數進行隱式初始化)。

d.當final 修飾變數時,則為常量,後面不可修改。

final表示的就是最終的,最後的

五、繼承之super關鍵字

      super在子類的內部使用,代表的是父類對象,那麼可以使用super 擷取父類的屬性和方法,分別為:super.屬性和super.方法

注意:super 關鍵字與其構造方法有一定的關係

a.如果父類的構造方法是無參的構造方法,子類的構造方法中隱式調用了super(),當然也可以顯示調用,並且在構造方法的第一行

b.如果在父類中的構造方法是自訂的有參的構造方法,那麼在子類中必須顯式的調用有參的構造方法,如

c.如果子類構造方法中既沒有顯式的調用父類的構造方法,父類中也沒有無參的構造方法,那麼編譯器會報錯。

 

以上便是總結的java的繼承這一大特性。

Java之繼承

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.