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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

面向对象-继承

發(fā)布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象-继承 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

繼承:

概念:

  • 繼承父類的屬性行為,使得子類對象可以直接具有與父類相同的屬性、相同的行為。子類可以直接訪問父類中的非私有的屬性和行為。
  • 繼承是多態(tài)的前提,如果沒有繼承,就沒有多態(tài)。

特點:

  • java只能單繼承,但可以多層繼承(a繼承b,b繼承c,那么a就有b和c的屬性)
  • 老師和學生是人的一種,那么人就是父類,老師學生就是子類(誰是誰的一種)
  • 為什么不支持多繼承?
    如果是a同時繼承b和c,而且b和c都有一個method方法,那a會懵逼,它不知道用哪個,為了不讓它懵逼,所以不能多繼承,但是可以多層繼承,因為有就近原則

格式:

class 子類 extends 父類 {...} // Java是單繼承的。一個類智能繼承一個類(一個人只有一個親生父母)

好處:

1.提高代碼的復用性(相同的代碼不需要重復的寫,只需要提取到父類中,子類可以直接使用)
2.提高代碼的維護性

弊端:

  • 耦合性(代碼與代碼之間存在關聯(lián)就是耦合)
  • 降低代碼的靈活性(繼承了以后子類必須擁有父類的非私有屬性和方法,子類會被約束)

就近原則:

在子類方法中訪問一個變量,采用的是就近原則,先看自己有沒有,沒有就找爸爸要

  • 整個流程是這樣:
    子類局部范圍找
    子類成員范圍找
    父類成員范圍找
    如果都沒有就報錯(不考慮父親的父親…)

使用場景:

類與類之間存在相同(共性)的內(nèi)容,就可以使用繼承優(yōu)化代碼。
比如iPhone是一個手機品牌,huawei是一個手機品牌,Samsung也是一個手機品牌,但都有一個共性就是手機,所以就都可以繼承手機類

案例:

學生類:

  • 屬性:姓名、年齡、學習、吃飯、睡覺;

老師類:

  • 屬性:姓名、年齡、教書、吃飯、睡覺;

班主任類

  • 屬性:姓名、年齡、管理、吃飯、睡覺;

思路:

共同擁有的屬性抽取到父類,子類只需要繼承父類就可以得到這些屬性、方法,子類只需要寫子類特有的方法即可。

// 定義父類 public class Human {private String name;private int age;public void eat(){System.out.println("我是父類的吃方法");}public void sleep(){System.out.println("我是父類的睡覺方法");}// 省略get、set、構造方法}// 定義學生類 public class Student extends Human {public void study(){System.out.println("我是學生類的上課方法");}// 定義老師類 public class Teacher extends Human { public void teach(){System.out.println("我是老師類的上課方法");}} }// 定義班主任類 public class ClassTeach extends Human{public void manage(){System.out.println("我是班主任類的管理方法");} }// 定義測試類public static void main(String[] args) {Teacher teacher = new Teacher();teacher.eat();teacher.sleep();teacher.teach();teacher.setAge(21);teacher.setName("小明");System.out.println(teacher);} }

得到結果:

注意:

子類不能繼承父類的構造器,因為子類有自己的構造器。
但是子類可以繼承父類的私有成員(成員變量,方法),只是子類無法直接訪問而已,可以通過getter/setter方法訪問父類的private成員變量。

super:

概念:

this:代表本類對象的引用
super:代表父類存儲空間的標識(可以理解為父類對象引用)

this和super的使用區(qū)別:

成員變量:

  • this.成員變量 – 訪問本類成員變量
  • super.成員變量 – 訪問父類成員變量

成員方法:

  • this.成員方法 – 訪問本類成員方法
  • super.成員方法 – 訪問父類成員方法

構造方法:

  • this(…) – 訪問本類構造方法
  • super(…) – 訪問父類構造方法

繼承中構造方法的訪問特點:

通過子類對象訪問一個方法

  • 子類成員范圍找
  • 父類成員范圍找
  • 如果都沒有就報錯(不考慮父親的父親…)
  • 問題:

    • 子類繼承父類出現(xiàn)重名的成員變量時會有變化嗎?
      子類繼承父類后,出現(xiàn)重名的成員變量,子類會優(yōu)先訪問自己的,自己沒有才去訪問父類的
    • 子類中所有的構造方法默認都會訪問父類中無參的構造方法
    • 為什么要把super()放在第一行
    • 子類會繼承父類中的數(shù)據(jù),可能還會使用父類的數(shù)據(jù)。所以,子類初始化之前,一定要先完成父類數(shù)據(jù)的初始化, 原因在于,子類構造器的第一行都隱含了一個super()去調(diào)用父類的無參構造器,super()可以省略不寫。
    • 如果父類中沒有無參構造方法,只有帶參構造方法,該怎么辦呢?
  • 通過使用super關鍵字去顯示的調(diào)用父類的帶參構造方法
  • 子類通過this去調(diào)用本類的其他構造方法,本類其他構造方法再通過super去手動調(diào)用父類的帶參的構造方法
    注意: this(…)super(…) 必須放在構造方法的第一行有效語句,并且二者不能共存,默認的super();也是在第一行的,只是隱式的而已。
  • 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結

    以上是生活随笔為你收集整理的面向对象-继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。