国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

類的繼承和super關(guān)鍵字的使用(JAVA)

這篇具有很好參考價(jià)值的文章主要介紹了類的繼承和super關(guān)鍵字的使用(JAVA)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

繼承

super?

?子類的構(gòu)造方法

final


繼承

所有的OOP語(yǔ)言都會(huì)有三個(gè)特征:

  1. 封裝(點(diǎn)擊可跳轉(zhuǎn))
  2. 繼承
  3. 多態(tài)(點(diǎn)擊可跳轉(zhuǎn))

為什么會(huì)有繼承呢?可以先看下面的例子:

類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言

????????上面這兩個(gè)類中的代碼很相似因?yàn)樗鼈冎挥凶詈笠粋€(gè)方法不同其它的都相同,這樣定義不但導(dǎo)致代碼冗余而且非常麻煩。而在OOP語(yǔ)言中繼承就是專門(mén)用來(lái)進(jìn)行共性抽取,實(shí)現(xiàn)代碼復(fù)用。


繼承(inheritance)機(jī)制:是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有類特 性的基礎(chǔ)上進(jìn)行擴(kuò)展,增加新功能,這樣產(chǎn)生新的類,稱派生類。繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的層次結(jié)構(gòu), 體現(xiàn)了由簡(jiǎn)單到復(fù)雜的認(rèn)知過(guò)程。繼承主要解決的問(wèn)題是:共性的抽取,實(shí)現(xiàn)代碼復(fù)用。

在JAVA中要實(shí)現(xiàn)繼承需要借助extends關(guān)鍵字。

修飾符 class 子類 extends 父類 {
// ...
}

此時(shí)我們?cè)诳丛倜娴睦永蠋熀蛯W(xué)生都屬于人這個(gè)大類,那么我們就可以單獨(dú)定義一個(gè)People類來(lái)將他們相同的屬性和方法放在一起,然后由學(xué)生類和老師類分別繼承人這個(gè)大類:

class People{
    public String name;
    public int age;
    public void speak(){
        System.out.println(this.name+"正在說(shuō)話");
    }
}

class Teacher extends People{
    public void work(){
        System.out.println(this.name+"正在教書(shū)");
    }
}

class Student extends People{
    public void study(){
        System.out.println(this.name+"正在學(xué)習(xí)");
    }
}
public class Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.name = "zhangsan";
        teacher.age = 24;
        teacher.speak();
        teacher.work();
        System.out.println("==========");
        Student student = new Student();
        student.name = "xiaoming";
        student.age = 15;
        student.speak();
        student.study();
    }
}

類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言

?注意:子類會(huì)將父類中的成員變量或者成員方法繼承到子類中。

那么現(xiàn)在又有一個(gè)新問(wèn)題如果子類中有和父類相同的屬性或方法那系統(tǒng)會(huì)怎么辦?

class People{
    public String name;
    public int age = 25;
    public void speak(){
        System.out.println(this.name+"正在說(shuō)話");
    }
}

class Teacher extends People{
    public int age = 20;
    public void work(){
        System.out.println(this.name+"正在教書(shū)"+"今年"+this.age);
    }
}

public class Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.name = "zhangsan";
        teacher.work();

    }
}

此時(shí)父類和子類都有age屬性代碼運(yùn)行后可以看到使用的是子類的屬性。?

類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言

?總結(jié):

  1. 通過(guò)子類對(duì)象訪問(wèn)父類與子類中屬性時(shí),優(yōu)先訪問(wèn)自己的,自己沒(méi)有時(shí)再到父類中找,如果父類中也沒(méi)有則報(bào)錯(cuò)。
  2. 通過(guò)子類對(duì)象訪問(wèn)父類與子類中不同名方法時(shí),優(yōu)先在子類中找,找到則訪問(wèn),否則在父類中找,找到則訪問(wèn),否則編譯報(bào)錯(cuò)。
  3. 通過(guò)子類對(duì)象訪問(wèn)父類與子類同名方法時(shí),如果父類和子類同名方法的參數(shù)列表不同(重載),根據(jù)調(diào)用方法適傳遞的參數(shù)選擇合適的方法訪問(wèn),如果沒(méi)有則報(bào)錯(cuò);

就算父類中有private修飾的屬性或方法子類也會(huì)將它繼承下來(lái)但是無(wú)法訪問(wèn)。

類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言


super?

在上面的例子中出現(xiàn)了一個(gè)新的關(guān)鍵字super。那么super關(guān)鍵字是干什么的?

該關(guān)鍵字主要作用:在子類方法中訪問(wèn)父類的成員。

class People{
    public String name;
    public int age = 25;
    public void speak(){
        System.out.println(this.name+"正在說(shuō)話");
    }
}

class Teacher extends People{
    public int age = 20;
    public void work(){
        System.out.println(this.name+"正在教書(shū)"+"今年"+super.age);
    }
}

public class Test {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.name = "zhangsan";
        teacher.work();

    }
}

因?yàn)楦割惡妥宇惗加衋ge屬性此時(shí)如果想訪問(wèn)父類的屬性就可以通過(guò)super關(guān)鍵字 ,super+.可以訪問(wèn)父類的屬性和方法。(下文會(huì)為大家介紹super的第三種使用方法)。

類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言
?

?子類的構(gòu)造方法

此時(shí)如果父類有帶參數(shù)的構(gòu)造方法那么系統(tǒng)將會(huì)報(bào)錯(cuò)。

類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言

當(dāng)父類中加入了含有兩個(gè)參數(shù)構(gòu)造方法之后代碼就會(huì)報(bào)錯(cuò)。

接下來(lái)就為大家介紹一下super關(guān)鍵字的第三種使用方法:

super();

它可以調(diào)用父類的構(gòu)造方法。

注:它必須放在構(gòu)造方法的第一行。

因?yàn)閷?shí)例化對(duì)象時(shí)有兩個(gè)比較重要的步驟:

  1. 為對(duì)象分配內(nèi)存;
  2. 調(diào)用合適的構(gòu)造方法。

上面的代碼在我們自己寫(xiě)了有參構(gòu)造方法之后報(bào)錯(cuò)的原因就是子類的構(gòu)造方法沒(méi)有調(diào)用父類的構(gòu)造方法。(當(dāng)我們自己寫(xiě)了構(gòu)造方法后系統(tǒng)就不會(huì)再為我們提供構(gòu)造方法了,而子類對(duì)象構(gòu)造時(shí),需要先調(diào)用父類構(gòu)造方法,然后再執(zhí)行子類的構(gòu)造方法。當(dāng)我們沒(méi)有寫(xiě)構(gòu)造方法時(shí)系統(tǒng)會(huì)默認(rèn)調(diào)用如下的構(gòu)造方法:類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言, 我們只寫(xiě)了有參構(gòu)造,所以系統(tǒng)就會(huì)因?yàn)檎也坏綗o(wú)參構(gòu)造而報(bào)錯(cuò),此時(shí)就需要我們自己進(jìn)行調(diào)用:類的繼承和super關(guān)鍵字的使用(JAVA),java,開(kāi)發(fā)語(yǔ)言

子類對(duì)象中成員是有兩部分組成的,基類繼承下來(lái)的以及子類新增加的部分 。父子父子肯定是先有父再有子,所以在構(gòu)造子類對(duì)象時(shí)候 ,先要調(diào)用基類的構(gòu)造方法,將從基類繼承下來(lái)的成員構(gòu)造完整,然后再調(diào)用子類自己的構(gòu)造方法,將子類自己新增加的成員初始化完整。

注意:

  1. 若父類顯式定義無(wú)參或者默認(rèn)的構(gòu)造方法,在子類構(gòu)造方法第一行默認(rèn)有隱含的super()調(diào)用,即調(diào)用基類構(gòu)造方法;
  2. 如果父類構(gòu)造方法是帶有參數(shù)的,此時(shí)需要用戶為子類顯式定義構(gòu)造方法,并在子類構(gòu)造方法中選擇合適的父類構(gòu)造方法調(diào)用,否則編譯失敗;
  3. 在子類構(gòu)造方法中,super(...)調(diào)用父類構(gòu)造時(shí),必須是子類構(gòu)造函數(shù)中第一條語(yǔ)句;
  4. super(...)只能在子類構(gòu)造方法中出現(xiàn)一次,并且不能和this同時(shí)出現(xiàn)。
    ?

final

在JAVA中只支持以下幾種繼承方式:

  • 單繼承;
  • 多層繼承;
  • 不同類繼承同一個(gè)類。

一般我們不希望出現(xiàn)超過(guò)三層的繼承關(guān)系繼承層次如果繼承層次太多太復(fù)雜,?就需要考慮對(duì)代碼進(jìn)行重構(gòu)了。

那我們應(yīng)該如何阻止別人不讓他們進(jìn)行繼承呢?

JAVA中提供了final關(guān)鍵可以用來(lái)修飾變量、成員方法以及類。

  • 修飾變量或字段,表示常量(即不能修改)
  • 修飾類:表示此類不能被繼承
  • 修飾方法:表示該方法不能被重寫(xiě)

我們只要在不想被繼承的類的前面用final修飾就可以了:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-631563.html

繼承層次上代碼的初始化順序:

  1. 父類靜態(tài)
  2. 子類靜態(tài)
  3. 父類實(shí)例
  4. 父類構(gòu)造
  5. 子類實(shí)例
  6. 子類構(gòu)造

到了這里,關(guān)于類的繼承和super關(guān)鍵字的使用(JAVA)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java關(guān)鍵字super解釋

    Java關(guān)鍵字super解釋

    又是看了一大堆文字介紹,非常系統(tǒng)和官方,理解要費(fèi)半天勁,所以總結(jié)一下super它到底有啥用,還有代碼演示也會(huì)放出來(lái),這里使用的IDE為idea 還是先官方一下 在java中,super表示超類(就是我們俗稱的父類),當(dāng)子類需要引用父類的字段時(shí),我們就可以使用super.FieldName. 因此

    2024年02月07日
    瀏覽(22)
  • 【Java入門(mén)】final關(guān)鍵字、static關(guān)鍵字、內(nèi)部類的認(rèn)識(shí)

    前言 : final是Java中的一個(gè)修飾符,用于表示某個(gè)變量、方法或者類不能被修改。final可以用于修飾類、方法和變量(局部變量,成員變量)。被final所修飾的類不能被繼承,被final所修飾的方法不能被重寫(xiě),被final所修飾的變量,不能被重新賦值 。 static是Java中的一

    2024年02月11日
    瀏覽(93)
  • 【JavaSE專欄57】深度解析Java中的this和super關(guān)鍵字:用途、差異和實(shí)際應(yīng)用

    【JavaSE專欄57】深度解析Java中的this和super關(guān)鍵字:用途、差異和實(shí)際應(yīng)用

    博主 默語(yǔ)帶您 Go to New World. ? 個(gè)人主頁(yè)—— 默語(yǔ) 的博客???? 《java 面試題大全》 ??惟余輩才疏學(xué)淺,臨摹之作或有不妥之處,還請(qǐng)讀者海涵指正。??? 《MYSQL從入門(mén)到精通》數(shù)據(jù)庫(kù)是開(kāi)發(fā)者必會(huì)基礎(chǔ)之一~ ?? 吾期望此文有資助于爾,即使粗淺難及深廣,亦備添少許微薄

    2024年02月07日
    瀏覽(30)
  • 每天一個(gè)知識(shí)點(diǎn) - 了解和使用super關(guān)鍵字

    super是一個(gè),super和this很類似 可以使用 super() 函數(shù)訪問(wèn)父類的構(gòu)造函數(shù),從而委托父類完成一些初始化的工作 如果子類重寫(xiě)了父類的中某個(gè)方法的實(shí)現(xiàn),可以通過(guò)使用 super 來(lái)引用父類的方法實(shí)現(xiàn)? ? ? ? super( )函數(shù)是用于調(diào)用父類的一個(gè)方法,指向了當(dāng)前對(duì)象自

    2024年02月21日
    瀏覽(25)
  • ES6中的Class關(guān)鍵字和super()方法,使用詳細(xì)(class類和super()方法)

    簡(jiǎn)介:在ES6中,我們可以使用class來(lái)定義類,并通過(guò) extends 實(shí)現(xiàn)類的繼承,然后在子類中,我們可以使用 super() 來(lái)調(diào)用父類的構(gòu)造函數(shù);今天來(lái)分享下class的使用詳細(xì)。 1、 首先,使用class,定義一個(gè)父類; 2、 然后再定義一個(gè)子類, 通過(guò)ex

    2024年02月12日
    瀏覽(23)
  • JavaSE基礎(chǔ)(19) super,this 關(guān)鍵字

    子類對(duì)象的創(chuàng)建過(guò)程: 子類的構(gòu)造方法中,默認(rèn)先調(diào)用父類的無(wú)參構(gòu)造方法。如果沒(méi)有顯示的調(diào)用,那么隱含著super()。 ????????可以訪問(wèn)父類的屬性 ????????可以訪問(wèn)父類的方法 ????????指代父類的構(gòu)造方法, 如果有多個(gè),靠參數(shù)來(lái)區(qū)分。要在第一行。 ?????

    2023年04月10日
    瀏覽(23)
  • JavaScript的static、this、super關(guān)鍵字介紹

    static: ☆ static用于定義類的靜態(tài)方法和靜態(tài)屬性。 ☆ 靜態(tài)方法是直接與類相關(guān)聯(lián)的方法,不需要實(shí)例化類即可調(diào)用。 ☆ 靜態(tài)屬性是類本身的屬性,而不是實(shí)例的屬性。 ☆ 在靜態(tài)方法內(nèi)部,不能使用this來(lái)引用實(shí)例,因?yàn)殪o態(tài)方法與特定實(shí)例無(wú)關(guān)。 th

    2024年02月16日
    瀏覽(22)
  • 【ES6】js 中class的extends、super關(guān)鍵字用法和避坑點(diǎn)

    在JavaScript中,使用class可以實(shí)現(xiàn)面向?qū)ο缶幊?。其中,extends和super是兩個(gè)非常重要的,它們分別用于實(shí)現(xiàn)類的繼承和調(diào)用父類的方法。 一、extends extends用于實(shí)現(xiàn)類的繼承,它可以讓一個(gè)子類繼承父類的屬性和方法。使用extends時(shí),需要指定要

    2024年02月09日
    瀏覽(23)
  • Java ---一些關(guān)鍵字

    ?①含義: this:當(dāng)前對(duì)象 在構(gòu)造器和非靜態(tài)代碼塊中,表示正在new的對(duì)象 在實(shí)例方法中,表示調(diào)用當(dāng)前方法的對(duì)象 ②this用法: this.成員變量:表示當(dāng)前對(duì)象的某個(gè)成員變量,而不是局部變量 this.成員方法:表示當(dāng)前對(duì)象的某個(gè)成員方法,完全可以省略this. this()或this(實(shí)參列

    2023年04月09日
    瀏覽(25)
  • C# 使用SIMD向量類型加速浮點(diǎn)數(shù)組求和運(yùn)算(4):用引用代替指針, 擺脫unsafe關(guān)鍵字,兼談Unsafe類的使用

    作者: zyl910 目錄 一、引言 二、辦法說(shuō)明 2.1 歷史 2.2 局部引用變量與引用所指的值(類似指針的 地址運(yùn)算符 、間接運(yùn)算符 * ) 2.3 重新分配局部引用變量(類似指針直接賦值) 2.4 引用地址調(diào)整(類似指針加減法) 2.5 引用地址比較(類似指針比較) 2.6 重新解釋(類似C++的

    2024年02月15日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包