您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java的繼承實例分析”,在日常操作中,相信很多人在Java的繼承實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java的繼承實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
面向對象的特征:
封裝:不必要公開的數據成員和方法,使用private關鍵字進行修飾。意義:安全性。
代碼中創建的類, 主要是為了抽象現實中的一些事物(包含屬性和方法).
有的時候客觀事物之間就存在一些關聯關系, 那么在表示成類和對象的時候也會存在一定的關聯
例如, 設計一個類表示動物
注意,:我們可以給每個類創建一個單獨的 java 文件. 類名必須和 .java 文件名匹配(大小寫敏感).
class Dag { public String name; public int age; public void eat(){ System.out.println("eat()"); } } class Bird{ public String name; public int age; public String wing; public void eat(){ System.out.println("eat()"); } public void fly(){ System.out.println("fly"); }
定義了兩個類,一個是Dag類,一個是Bird類
對比一下上述的兩個類:
我們會發現它們之間有一些共性,我們就可以把他們相同的地方抽象出來重新定義一個類:
class Animal{ public String name; public int age; public void eat(){ System.out.println("eat()"); } } class Dag { public String name; public int age; public void eat(){ System.out.println("eat()"); } } class Bird{ public String name; public int age; public String wing; public void eat(){ System.out.println("eat()"); } public void fly(){ System.out.println("fly"); } }
這三個類都具備一個相同的 eat 方法, 而且行為是完全一樣的.
這三個類都具備一個相同的 name 屬性, 而且意義是完全一樣的.
從邏輯上講, Dag 和 Bird 都是一種 Animal.
此時我們就可以讓 Dag 和 Bird 分別繼承 Animal 類, 來達到代碼重用的效果
此時, Animal 這樣被繼承的類, 我們稱為 父類 , 基類 或 超類, 對于像Dag 和 Bird 這樣的類, 我們稱為 子類, 派生類 和現實中的兒子繼承父親的財產類似, 子類也會繼承父類的字段和方法, 以達到代碼重用的效果.
語法規則
基本語法:
class 子類 extends 父類 {
}
使用 extends 指定父類
Java 中一個子類只能繼承一個父類 (而C++/Python等語言支持多繼承)
子類會繼承父類的所有 public 的字段和方法
對于父類的 private 的字段和方法, 子類中是無法訪問的
子類的實例中, 也包含著父類的實例. 可以使用 super 關鍵字得到父類實例的引用
對于上面的代碼, 可以使用繼承進行改進. 此時我們讓 Dag 和 Bird 繼承自 Animal 類, 那么 Dag 在定義的時候就不必再 寫 name 字段和 eat 方法.
class Animal{ public String name; public int age; public void eat(){ System.out.println("eat()"); } } class Dag extends Animal { } class Bird extends Animal{ public String wing; public void fly(){ System.out.println("fly"); } }
因為子類繼承了父類的字段和方法,所以我們在main函數里就這樣寫:
extends 英文原意指 "擴展". 而我們所寫的類的繼承, 也可以理解成基于父類進行代碼上的 "擴展".
例如我們寫的 Bird 類, 就是在 Animal 的基礎上擴展出了 fly 方法.
如果我們把age 改成 private, 那么此時子類就不能訪問了
因為現在age是私有的,不能在子類當中使用age
子類構造的同時,要先幫助父類來進行構造
當我們這樣寫就不報錯了,這是為什么呢?
super三種用法://不能出現在靜態方法當中,因為super相當于父類對象的引用
1、super():調用父類的構造方法
2、super.function():調用父類的普通方法
3、super.data:調用父類的成員屬性
剛才我們發現, 如果把字段設為 private, 子類不能訪問. 但是設成 public, 又違背了我們 "封裝" 的初衷. 兩全其美的辦法就是 protected 關鍵字
對于類的調用者來說, protected 修飾的字段和方法是不能訪問的
對于類的 子類 和 同一個包的其他類 來說, protected 修飾的字段和方法是可以訪問的
// Animal.java public class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat(String food) { System.out.println(this.name + "正在吃" + food); } } // Bird.java public class Bird extends Animal { public Bird(String name) { super(name); } public void fly() { // 對于父類的 protected 字段, 子類可以正確訪問 System.out.println(this.name + "正在飛 ︿( ̄︶ ̄)︿"); } } // Test.java 和 Animal.java 不在同一個 包 之中了. public class Test { public static void main(String[] args) { Animal animal = new Animal("小動物"); System.out.println(animal.name); // 此時編譯出錯, 無法訪問 name } }
Java 中對于字段和方法共有四種訪問權限
private: 類內部能訪問, 類外部不能訪問
默認(也叫包訪問權限): 類內部能訪問, 同一個包中的類可以訪問, 其他類不能訪問.
protected: 類內部能訪問, 子類和同一個包中的類可以訪問, 其他類不能訪問.
public : 類內部和類的調用者都能訪問
曾經我們學習過 final 關鍵字, 修飾一個變量或者字段的時候, 表示 常量 (不能修改).
final int a = 10;
a = 20; // 編譯出錯
final 關鍵字也能修飾類, 此時表示被修飾的類就不能被繼承.
final public class Animal { ... } public class Bird extends Animal { ... } // 編譯出錯 Error:(3, 27) java: 無法從最終com.bit.Animal進行繼承
final 關鍵字的功能是 限制 類被繼承
"限制" 這件事情意味著 "不靈活". 在編程中, 靈活往往不見得是一件好事. 靈活可能意味著更容易出錯. 是用 final 修飾的類被繼承的時候, 就會編譯報錯, 此時就可以提示我們這樣的繼承是有悖這個類設計的初衷的
我們平時是用的 String 字符串類, 就是用 final 修飾的, 不能被繼承
到此,關于“Java的繼承實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。