<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
物件導向的特徵:
封裝:不必要公開的資料成員和方法,使用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由淺入深帶你精通繼承super的文章就介紹到這了,更多相關Java 繼承內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45