最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java繼承關(guān)系中構(gòu)造器的使用詳解

 更新時(shí)間:2025年10月22日 10:22:53   作者:Yvonnel1  
本文介紹了繼承關(guān)系中構(gòu)造器的使用要點(diǎn),創(chuàng)建子類對(duì)象時(shí),必須先調(diào)用父類構(gòu)造器實(shí)現(xiàn)初始化,若父類無(wú)參構(gòu)造器被覆蓋,子類需用super顯式調(diào)用父類構(gòu)造器,且super須寫在構(gòu)造器首行,感興趣的朋友跟隨小編一起看看吧

       本文講的是有繼承關(guān)系的兩個(gè)類之間,使用構(gòu)造器的細(xì)節(jié)。在看之前,請(qǐng)確定你已經(jīng)了解了“構(gòu)造器”和“繼承”基礎(chǔ)的語(yǔ)法知識(shí)。

       如果你對(duì)構(gòu)造器和繼承比較了解,可以直接跳過(guò)前面的基本介紹,直接看后面的繼承中構(gòu)造器的使用即可。

       先簡(jiǎn)單介紹一下構(gòu)造器基礎(chǔ):構(gòu)造器是一個(gè)類在實(shí)例化(創(chuàng)建)一個(gè)對(duì)象的時(shí)候,給對(duì)象初始化的一個(gè)特殊方法。打個(gè)比方:

public class temp {
    public static void main(String[] args) {
//創(chuàng)建一個(gè)person對(duì)象,并初始化對(duì)象的name 和 age
        Person person = new Person("jack",18);
    }
}
class Person {
    String name;
    int age;
    //帶有兩個(gè)參數(shù)的構(gòu)造器
    public Person(String name , int age){
        this.name = name;
        this.age =age;
    }
}

        這里就是運(yùn)用兩個(gè)參數(shù)的構(gòu)造器初始化了一個(gè)對(duì)象,當(dāng)然你可能會(huì)想,如果我寫Person(String name , int age)構(gòu)造器,那么在創(chuàng)建方法的時(shí)候是不是就不會(huì)使用構(gòu)造器了?

     答案是:當(dāng)然不會(huì),如果我們不定義構(gòu)造器,那么類里面默認(rèn)有一個(gè)無(wú)參構(gòu)造器,顧名思義就算沒(méi)有參數(shù)的構(gòu)造器,在創(chuàng)建對(duì)象的時(shí)候不對(duì)其進(jìn)行初始化。但是這個(gè)構(gòu)造器是存在的,只是沒(méi)什么用。

     而且這個(gè)無(wú)參構(gòu)造器在我們定義了一個(gè)有參數(shù)的構(gòu)造器之后就被覆蓋了(直接無(wú)了),此時(shí)如果我們?cè)僦苯?進(jìn)行無(wú)參創(chuàng)建,就會(huì)報(bào)錯(cuò)。

     如果我們還想使用無(wú)參構(gòu)造器,那么就需要在類中顯式聲明一下即可

class Person {
    String name;
    int age;
    //顯式聲明無(wú)參構(gòu)造器
    public Person(){
    }
    //帶有兩個(gè)參數(shù)的構(gòu)造器
    public Person(String name , int age){
        this.name = name;
        this.age =age;
    }
}

     當(dāng)然說(shuō)這么多,你只需要知道一條:在創(chuàng)建對(duì)象的時(shí)候一定會(huì)調(diào)用一次構(gòu)造器,不管是無(wú)參的還是有參的。

      然后是關(guān)于繼承的,這里也簡(jiǎn)單說(shuō)一下:繼承就是一個(gè)類(子類)通過(guò) extend 來(lái)使其具備所繼承類(父類)的屬性與成員方法。

     打個(gè)比方,我有兩個(gè)類:Person,Doctor。其中Person有屬性name,age。Doctor里面也有name和age。我們就可以讓Doctor繼承Perosn來(lái)獲得其屬性。

     再或者Pupil(小學(xué)生)和Gratuation(大學(xué)生)有很多共同屬性,我們可以創(chuàng)建一個(gè)父類Student讓二者繼承父類,來(lái)提高代碼復(fù)用性。

//父類 Student
class Student {
    public String name;
    public int age;
    public double score;
   }
//子類 Pupil
class Pupil extends Student {
         //其擁有父類Student里面的所有屬性
}
//子類Gratuate
class Gratuate extends Student{
         //其擁有父類Student里面的所有屬性
}

   OK,現(xiàn)在進(jìn)入正題,現(xiàn)在我們有一個(gè)子類Son,一個(gè)父類Base。Son繼承了Base里面的屬性和成員方法

//父類
class Base {
//顯式聲明一下無(wú)參構(gòu)造器
    public Base() {
  System.out.println("父類Base中的構(gòu)造器Base()被調(diào)用");
    }
}  
//子類
class Son extends Base {
    public Son() {
//顯式聲明一下無(wú)參構(gòu)造器
System.out.println("子類Son的構(gòu)造器Son()被調(diào)用");
  }
}
//主程序 
public class Run {
    public static void main(String[] args) {
        Son son = new Son();
    }
}Public 
   

   現(xiàn)在我們創(chuàng)建了一個(gè)Son類,這時(shí)候程序會(huì)有以下輸出

我們就可以得到第一個(gè)特點(diǎn):子類對(duì)象必須調(diào)用父類的構(gòu)造器,完成初始化。

即在new Son()的時(shí)候,在Son的構(gòu)造器初始化之前需要先調(diào)用父類的構(gòu)造器。當(dāng)父類中的無(wú)參構(gòu)造器存在的時(shí)候,這個(gè)過(guò)程可以自動(dòng)進(jìn)行,不需要我們手動(dòng)調(diào)用。

   那么如果父類的無(wú)參構(gòu)造器被覆蓋了,會(huì)發(fā)生什么?如果父類沒(méi)有無(wú)參構(gòu)造器,我們就會(huì)發(fā)現(xiàn)我們還按照上面的寫代碼,編譯是不通過(guò)的。

class Son extends Base {
    public Son() {
   //編譯不通過(guò)
        System.out.println("子類Son的構(gòu)造器Son()被調(diào)用");
    }
}
class Base {
    public Base(int n1) {
    System.out.println("父類Base中的構(gòu)造器Base(int n1)被調(diào)用");
    }
}

  因?yàn)榇藭r(shí)系統(tǒng)不知道要調(diào)用父類中的那個(gè)構(gòu)造器,所以此時(shí)需要我們手動(dòng)填寫調(diào)用父類中的那個(gè)構(gòu)造器即:

      如果父類中的無(wú)參構(gòu)造器被覆蓋了,而我們也沒(méi)有顯式無(wú)參構(gòu)造器。那么在子類調(diào)用構(gòu)造器的時(shí)候,必須要使用 super() ;方法指明要使用父類中的那個(gè)構(gòu)造器進(jìn)行初始化。

class Son extends Base {
    public Son() {
        super(2);//使用 Base(int n)構(gòu)造器,傳入一個(gè)int
        System.out.println("子類Son的構(gòu)造器Son()被調(diào)用");
    }
class Base {
    public Base(int n1) {
    System.out.println("父類Base中的構(gòu)造器Base(int n1)被調(diào)用");
    }

需要特別注意的是:super方法只能放在構(gòu)造器的第一行。

      總結(jié)一下就是:

1.子類對(duì)象必須調(diào)用父類的構(gòu)造器,完成初始化。

2.如果父類中的無(wú)參構(gòu)造器被覆蓋了,而我們也沒(méi)有顯式無(wú)參構(gòu)造器。那么在子類調(diào)用構(gòu)造器的時(shí)候,必須要使用 super() ;方法指明要使用父類中的那個(gè)構(gòu)造器進(jìn)行初始化。

到此這篇關(guān)于Java繼承關(guān)系中構(gòu)造器的使用詳解的文章就介紹到這了,更多相關(guān)java構(gòu)造器使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Maven的生命周期與自定義插件實(shí)現(xiàn)方法

    Maven的生命周期與自定義插件實(shí)現(xiàn)方法

    Maven的生命周期就是對(duì)所有的構(gòu)建過(guò)程進(jìn)行抽象和統(tǒng)一。包含了項(xiàng)目的清理、初始化、編譯、測(cè)試、打包、集成測(cè)試、驗(yàn)證、部署和站點(diǎn)生成等幾乎所有的構(gòu)建步驟
    2022-12-12
  • Java基于iText7實(shí)現(xiàn)PDF添加通用文本水印的示例詳解

    Java基于iText7實(shí)現(xiàn)PDF添加通用文本水印的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java基于iText7實(shí)現(xiàn)PDF添加通用文本水印的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2026-02-02
  • 詳解Mybatis的緩存

    詳解Mybatis的緩存

    這篇文章主要介紹了Mybatis緩存的相關(guān)資料,幫助大家更好的理解和使用Mybatis框架,感興趣的朋友可以了解下
    2021-01-01
  • java用split分割字符串的一個(gè)有趣現(xiàn)象

    java用split分割字符串的一個(gè)有趣現(xiàn)象

    最近在項(xiàng)目中使用了java中的split分割字符串,發(fā)現(xiàn)了一個(gè)bug,充分了展示了自己對(duì)java底層的認(rèn)知有很多的不足和欠缺。下面將這次的經(jīng)過(guò)總結(jié)出來(lái)分享給大家,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • SpringBoot中使用websocket出現(xiàn)404的解決方法

    SpringBoot中使用websocket出現(xiàn)404的解決方法

    在Springboot中使用websocket時(shí),本地開發(fā)環(huán)境可以正常運(yùn)行,但部署到服務(wù)器環(huán)境出現(xiàn)404問(wèn)題,所以本文小編講給大家詳細(xì)介紹一下SpringBoot中使用websocket出現(xiàn)404的解決方法,需要的朋友可以參考下
    2023-09-09
  • Spring的編程式事務(wù)和聲明式事務(wù)詳解

    Spring的編程式事務(wù)和聲明式事務(wù)詳解

    這篇文章主要介紹了Spring的編程式事務(wù)和聲明式事務(wù)的相關(guān)內(nèi)容,涉及Spring事務(wù)屬性、Spring事務(wù)的基本類等知識(shí),需要的朋友可以了解下。
    2017-09-09
  • Java中RocketMq的消費(fèi)方式詳解

    Java中RocketMq的消費(fèi)方式詳解

    這篇文章主要介紹了Java中RocketMq的消費(fèi)方式詳解,RocketMQ的消費(fèi)方式都是基于拉模式拉取消息的,而在這其中有一種長(zhǎng)輪詢機(jī)制(對(duì)普通輪詢的一種優(yōu)化),來(lái)平衡上面Push/Pull模型的各自缺點(diǎn),需要的朋友可以參考下
    2023-10-10
  • SpringBoot整合RabbitMQ實(shí)現(xiàn)交換機(jī)與隊(duì)列的綁定

    SpringBoot整合RabbitMQ實(shí)現(xiàn)交換機(jī)與隊(duì)列的綁定

    這篇文章將通過(guò)幾個(gè)實(shí)例為大家介紹一些SpringBoot中RabbitMQ如何綁定交換機(jī)(交換器)與隊(duì)列,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-05-05
  • Java源碼解析HashMap成員變量

    Java源碼解析HashMap成員變量

    今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap成員變量,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • struts2通過(guò)action返回json對(duì)象

    struts2通過(guò)action返回json對(duì)象

    struts2通過(guò)action返回json對(duì)象其實(shí)很簡(jiǎn)單的,首先我們需要引入jar包,然后在寫一個(gè)簡(jiǎn)單的action就好了,接下來(lái)通過(guò)本文給大家介紹struts2通過(guò)action返回json對(duì)象的方法,感興趣的朋友一起看看吧
    2016-09-09

最新評(píng)論

无极县| 巴林右旗| 阜新市| 山东省| 泸州市| 留坝县| 陵水| 襄垣县| 新田县| 彰化市| 明溪县| 内乡县| 博乐市| 临猗县| 迁安市| 丘北县| 柯坪县| 治多县| 雅江县| 广饶县| 深圳市| 龙岩市| 偏关县| 保康县| 沈丘县| 托里县| 金华市| 冷水江市| 盱眙县| 富平县| 呼和浩特市| 当阳市| 太谷县| 田东县| 赤水市| 庆元县| 罗源县| 麻阳| 左贡县| 曲阳县| 彰化县|