日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.3 继承(extends)

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.3 继承(extends) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼承是面向對象的三大特征之一。繼承和現實生活中的“繼承”的相似之處是保留一些父輩的特性,從而減少代碼冗余,提高程序運行效率。

Java 中的繼承就是在已經存在類的基礎上進行擴展,從而產生新的類。已經存在的類稱為父類、基類或超類,而新產生的類稱為子類或派生類。在子類中,不僅包含父類的屬性和方法,還可以增加新的屬性和方法。

注意:

  • Java 類默認是可以被繼承的,但加了 final 關鍵字后就不能被繼承了,如 String 類。
  • 類的變量和方法有 public、private 和 protected 修飾符,public 表示外部可以訪問,private
    表示只能是內部訪問,protected 表示雖然不能被外部任意訪問,但可被子類訪問,protected
    還表示可以被同一個包中的其他類訪問,不管其他類是不是改類的子類。
  • 在 Java 中,每個類都有一個隱含的父類,即 Object。Object 沒有定義屬性,但定義了一些方法
  • Java 不支持多繼承,只允許一個類直接繼承另一個類,即子類只能有一個父類,extends 關鍵字后面只能有一個類名

Java 中子類繼承父類的語法格式如下:

修飾符 class class_name extends extend_class {// 類的主體 }

其中,class_name 表示子類(派生類)的名稱;
extend_class 表示父類(基類)的名稱;
extends 關鍵字直接跟在子類名之后,其后面是該類要繼承的父類名稱。例如:

public class Student extends Person{}

Java 的繼承通過 extends 關鍵字來實現,extends 的英文意思是擴展,而不是繼承。extends 很好的體現了子類和父類的關系,即子類是對父類的擴展,子類是一種特殊的父類。從這個角度看,使用繼承來描述子類和父類的關系是錯誤的,用擴展更恰當。

那么為什么國內把 extends 翻譯為“繼承”呢?子類擴展父類之后就可以獲得父類的屬性和方法,這與漢語中的繼承(子類從父類獲得一筆財富稱為繼承)具有相似性。

類的繼承不改變類成員的訪問權限,也就是說,如果父類的成員是公有的、被保護的或默認的,它的子類仍具有相應的這些特性,并且子類不能獲得父類的構造方法。

例 1
教師和學生都屬于人,他們具有共同的屬性:姓名、年齡、性別和身份證號,而學生還具有學號和所學專業兩個屬性,教師還具有教齡和所教專業兩個屬性。下面編寫 Java 程序代碼,使教師(Teacher)類和學生(Student)類都繼承于人(People)類,具體的實現步驟如下。

1)創建人類 People,并定義 name、age、sex、sn 屬性,代碼如下:

public class People {public String name; // 姓名public int age; // 年齡public String sex; // 性別public String sn; // 身份證號public People(String name, int age, String sex, String sn) {this.name = name;this.age = age;this.sex = sex;this.sn = sn;}public String toString() {return "姓名:" + name + "\n年齡:" + age + "\n性別:" + sex + "\n身份證號:" + sn;} }

如上述代碼,在 People 類中包含 4 個公有屬性、一個構造方法和一個 toString() 方法。

2)創建 People 類的子類 Student 類,并定義 stuNo 和 department 屬性,代碼如下:

public class Student extends People {private String stuNo; // 學號private String department; // 所學專業public Student(String name, int age, String sex, String sn, String stuno, String department) {super(name, age, sex, sn); // 調用父類中的構造方法this.stuNo = stuno;this.department = department;}public String toString() {return "姓名:" + name + "\n年齡:" + age + "\n性別:" + sex + "\n身份證號:" + sn + "\n學號:" + stuNo + "\n所學專業:" + department;} }

由于 Student 類繼承自 People 類,因此,在 Student 類中同樣具有 People 類的屬性和方法,這里重寫了父類中的 toString() 方法。

注意:如果在父類中存在有參的構造方法而并沒有重載無參的構造方法,那么在子類中必須含有有參的構造方法,因為如果在子類中不含有構造方法,默認會調用父類中無參的構造方法,而在父類中并沒有無參的構造方法,因此會出錯。

3)創建 People 類的另一個子類 Teacher,并定義 tYear 和 tDept 屬性,代碼如下:

public class Teacher extends People {private int tYear; // 教齡private String tDept; // 所教專業public Teacher(String name, int age, String sex, String sn, int tYear, String tDept) {super(name, age, sex, sn); // 調用父類中的構造方法this.tYear = tYear;this.tDept = tDept;}public String toString() {return "姓名:" + name + "\n年齡:" + age + "\n性別:" + sex + "\n身份證號:" + sn + "\n教齡:" + tYear + "\n所教專業:" + tDept;} }

Teacher 類與 Student 類相似,同樣重寫了父類中的 toString() 方法。

4)編寫測試類 PeopleTest,在該類中創建 People 類的不同對象,分別調用它們的 toString() 方法,輸出不同的信息。具體的代碼如下:

public class PeopleTest {public static void main(String[] args) {// 創建Student類對象People stuPeople = new Student("王麗麗", 23, "女", "410521198902145589", "00001", "計算機應用與技術");System.out.println("----------------學生信息---------------------");System.out.println(stuPeople);// 創建Teacher類對象People teaPeople = new Teacher("張文", 30, "男", "410521198203128847", 5, "計算機應用與技術");System.out.println("----------------教師信息----------------------");System.out.println(teaPeople);} }

運行程序,輸出的結果如下:

----------------學生信息--------------------- 姓名:王麗麗 年齡:23 性別:女 身份證號:410521198902145589 學號:00001 所學專業:計算機應用與技術 ----------------教師信息---------------------- 姓名:張文 年齡:30 性別:男 身份證號:410521198203128847 教齡:5 所教專業:計算機應用與技術

單繼承

Java 不支持多繼承,只允許一個類直接繼承另一個類,即子類只能有一個直接父類,extends 關鍵字后面只能有一個類名。例如,如下代碼會導致編譯錯誤:

class Student extends Person,Person1,Person2{} class Student extends Person,extends Person1,extends Person2{}

很多地方在介紹 Java 的單繼承時,可能會說 Java 類只能有一個父類,嚴格來講,這種說法是錯誤的,應該是一個類只能有一個直接父類,但是它可以有多個間接的父類。例如,Student 類繼承 Person 類,Person 類繼承 Person1 類,Person1 類繼承 Person2 類,那么 Person1 和 Person2 類是 Student 類的間接父類。圖 1 展示了單繼承的關系。

從圖 1 中可以看出,三角形、四邊形和五邊形的直接父類是多邊形類,它們的間接父類是圖形類。圖形類、多邊形類和三角形、四邊形、五邊形類形成了一個繼承的分支。在這個分支上,位于下層的子類會繼承上層所有直接或間接父類的屬性和方法。如果兩個類不在同一個繼承樹分支上,就不會存在繼承關系,例如多邊形類和直線。

如果定義一個 Java 類時并未顯式指定這個類的直接父類,則這個類默認繼承 java.lang.Object 類。因此,java.lang.Object 類是所有類的父類,要么是其直接父類,要么是其間接父類。因此所有的 Java 對象都可調用 java.lang.Object 類所定義的實例方法。

使用繼承的注意點:

  • 子類一般比父類包含更多的屬性和方法。
  • 父類中的 private 成員在子類中是不可見的,因此在子類中不能直接使用它們。
  • 父類和其子類間必須存在“是一個”即“is-a”的關系,否則不能用繼承。但也并不是所有符合“is-a”關系的都應該用繼承。例如,正方形是一個矩形,但不能讓正方形類來繼承矩形類,因為正方形不能從矩形擴展得到任何東西。正確的繼承關系是正方形類繼承圖形類。
  • Java 只允許單一繼承(即一個子類只能有一個直接父類)。

繼承的優缺點

在面向對象語言中,繼承是必不可少的、非常優秀的語言機制,它有如下優點:

  • 實現代碼共享,減少創建類的工作量,使子類可以擁有父類的方法和屬性。
  • 提高代碼維護性和可重用性。
  • 提高代碼的可擴展性,更好的實現父類的方法。

自然界的所有事物都是優點和缺點并存的,繼承的缺點如下:

  • 繼承是侵入性的。只要繼承,就必須擁有父類的屬性和方法。
  • 降低代碼靈活性。子類擁有父類的屬性和方法后多了些約束。
  • 增強代碼耦合性(開發項目的原則為高內聚低耦合)。當父類的常量、變量和方法被修改時,需要考慮子類的修改,有可能會導致大段的代碼需要重構。

總結

以上是生活随笔為你收集整理的1.3 继承(extends)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 深夜国产福利 | 国产av毛片 | 爽爽窝窝午夜精品一区二区 | 欧美午夜精品一区二区三区电影 | 国产精品视频一区二区在线观看 | 91亚洲一线产区二线产区 | 久久亚洲综合 | 黄色91免费观看 | 老司机精品视频在线播放 | 欧美黄色成人 | 国产视频1区2区 | 国产精品自拍在线 | 国产三级在线免费观看 | 成年人精品视频 | 黄色a级片视频 | 一区二区激情 | 美女张开腿让人桶 | 国产精品久久久久久久一区探花 | 国产老女人乱淫免费 | 尤物综合网| 在线免费观看视频网站 | 激情爱爱网站 | 一级黄色大片免费看 | 欧美日韩亚洲免费 | 疯狂做爰的爽文多肉小说王爷 | 久久黄网 | 污视频软件在线观看 | 狠狠做深爱婷婷久久综合一区 | 美女色诱男人激情视频 | 亚洲在线观看视频 | 亚洲精品综合网 | 久久久久亚洲av无码专区 | 国产欧美日韩在线视频 | 欧美丰满美乳xxⅹ高潮www | 免费看黄色的网站 | 麻豆免费视频网站 | 中文字幕123区 | 午夜小网站 | 国产又黄视频 | 污片在线免费观看 | 欧美精品区 | 婷婷狠狠 | 日本一区二区三区在线观看 | 亚洲夜夜爱 | 激情免费视频 | 人妻丰满熟妇av无码区不卡 | 日韩精品在线网站 | 欧美成人精品激情在线视频 | 一区二区91| 91亚洲精品国偷拍 | 少妇超碰 | 在线不卡中文字幕 | a级在线观看视频 | 久久精品免费在线 | 亚洲女优在线 | 国产三级三级在线观看 | 特大黑人巨交吊性xxxx视频 | 色婷婷免费 | 中国超碰 | 天堂av√ | 亚洲永久视频 | 亚洲成人激情视频 | 99视频网站 | 欧洲一级黄 | 国产五十路 | 美女扒逼| 人人射人人爱 | 欧美一区二区三区啪啪 | 欧美日韩在线一区 | 污视频免费网站 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 国产精品88| 国产一级二级视频 | 91麻豆精品91久久久久同性 | 在线免费播放av | h片在线观看视频 | 永久免费网站直接看 | 网站免费黄色 | 男男play视频 | 欧美成人精品一区二区综合免费 | 日韩 在线| 一本久久精品一区二区 | 少妇高潮伦 | 毛片库 | 女优在线观看 | 人妻在线一区二区三区 | 天天艹| 欧美少妇诱惑 | 裸体裸乳被免费看视频 | 国产经典久久 | 五月激情啪啪 | 变态另类ts人妖一区二区 | 九热精品 | 美女啪啪动态图 | 亚洲福利视频一区二区 | 久久婷婷亚洲 | 成人国产视频在线观看 | 无码日韩人妻精品久久蜜桃 | 一区二区三区在线免费视频 |