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

關(guān)于Java父類沒(méi)有無(wú)參構(gòu)造方法子類處理方法

 更新時(shí)間:2024年01月31日 12:17:03   作者:Baiyi_destroyer  
父類無(wú)參構(gòu)造方法,子類不寫(xiě),其實(shí)會(huì)默認(rèn)調(diào)用父類的無(wú)參構(gòu)造方法也就是用super(),編譯運(yùn)行后,會(huì)打印出"子類會(huì)調(diào)用Father的第一個(gè)構(gòu)造方法,這篇文章給大家介紹關(guān)于Java父類沒(méi)有無(wú)參構(gòu)造方法子類處理方法,感興趣的朋友一起看看吧

關(guān)于父類沒(méi)有無(wú)參構(gòu)造方法,子類如何處理

1.父類無(wú)參構(gòu)造方法,子類不寫(xiě),其實(shí)會(huì)默認(rèn)調(diào)用父類的無(wú)參構(gòu)造方法也就是用super()。 編譯運(yùn)行后,會(huì)打印出"子類會(huì)調(diào)用Father的第一個(gè)構(gòu)造方法"

class Father{
    Father(){
        System.out.println("子類會(huì)調(diào)用Father的第一個(gè)構(gòu)造方法");
    }
}
class Son extends Father{
    //我沒(méi)在這寫(xiě)子類的構(gòu)造方法,但是編譯器默認(rèn)補(bǔ)上子類構(gòu)造方法,這里相當(dāng)于有個(gè)Son(){super(); }方法,當(dāng)然這個(gè)super()不寫(xiě)也一樣
}
class Demo{
    public static void main(String[] args)
    {
               Son s = new Son();
    }
}

2.但是注意了,下面代碼無(wú)法通過(guò)編譯。 因?yàn)楦割愔貙?xiě)了構(gòu)造方法,編譯器是不會(huì)補(bǔ)上無(wú)參構(gòu)造方法的。子類不重寫(xiě)構(gòu)造方法,系統(tǒng)會(huì)為子類默認(rèn)補(bǔ)上無(wú)參構(gòu)造方法Son(){super(); } ,注意這個(gè)super()調(diào)用的是父類的無(wú)參構(gòu)造方法。 這正好和第一句矛盾了,父類沒(méi)有無(wú)參數(shù)構(gòu)造方法子類無(wú)法調(diào)用到的。怎么解決,看第三條。

class Father{
    //父類的有參數(shù)構(gòu)造方法
    Father(String name){
        System.out.println("子類會(huì)調(diào)用Father的有參數(shù)構(gòu)造方法");
    }
}
class Son extends Father{
}
class Demo{
    public static void main(String[] args)
    {
        Son s = new Son();
    }
}

3.在第二條基礎(chǔ)上,子類重寫(xiě)構(gòu)造方法傳入的string字串,并且顯式的用super(name);調(diào)用父類的構(gòu)造方法,既然你都顯式用super(name);了編譯器就不會(huì)多事給子類補(bǔ)上super(); 這回就編譯運(yùn)行正常了。

class Father{
    Father(String name){
        System.out.println("子類會(huì)調(diào)用Father的第二個(gè)構(gòu)造方法");
    }
}
class Son extends Father{
    Son(String name){
         super(name);
    }
}
class Demo{
    public static void main(String[] args)
    {
        Son s = new Son("接第二條");
    }
}

4.總之:

 a.涉及構(gòu)造方法,你不寫(xiě)構(gòu)造方法,編譯器會(huì)默認(rèn)寫(xiě)上無(wú)參構(gòu)造方法,你寫(xiě)編譯器就完全不管事了。

b.執(zhí)行子類的構(gòu)造方法前一定是執(zhí)行父類構(gòu)造方法的(構(gòu)造方法用來(lái)初始化的,沒(méi)爸爸怎么來(lái)兒子),所以子類的構(gòu)造方法中一定是先執(zhí)行父類的構(gòu)造方法用super()。

c.這個(gè)super和a說(shuō)的一樣,你不顯式寫(xiě)出來(lái),編譯器默認(rèn)用super(),也就是調(diào)用父類的無(wú)參構(gòu)造方法,那你父類肯定得有無(wú)參構(gòu)造方法吧。所以我們寫(xiě)上一個(gè)父類帶參構(gòu)造方法的時(shí)候,另外手動(dòng)補(bǔ)上個(gè)無(wú)參構(gòu)造方法要好些。 

補(bǔ)充:

Java有參構(gòu)造方法與無(wú)參構(gòu)造方法

前言

遇到了就簡(jiǎn)單寫(xiě)一下吧,如果能夠?qū)δ阌袔椭?,點(diǎn)個(gè)贊吧。首先清晰明了的了解到有參構(gòu)造方法與無(wú)參構(gòu)造方法、以及應(yīng)用,然后實(shí)戰(zhàn)項(xiàng)目一般會(huì)使用的Lombok,不會(huì)手動(dòng)再生成get、set。
定義:
在編寫(xiě)一個(gè)類時(shí)沒(méi)有添加無(wú)參構(gòu)造方法,那么編譯器會(huì)自動(dòng)添加無(wú)參構(gòu)造方法;(如果自己手動(dòng)添加構(gòu)造函數(shù),無(wú)論有參數(shù)或是沒(méi)參數(shù),默認(rèn)構(gòu)造函數(shù)都將無(wú)效)
編寫(xiě)時(shí)添加有參構(gòu)造方法而未添加無(wú)參構(gòu)造方法,那么編譯器只認(rèn)有參構(gòu)造方法而不會(huì)默認(rèn)添加無(wú)參構(gòu)造方法。
如果需要使用無(wú)參構(gòu)造方法,一定要在類里面添加。

有參構(gòu)造方法

在之前我們要為一個(gè)對(duì)象賦值,先要?jiǎng)?chuàng)建好對(duì)象之后然后“對(duì)象名.屬性名”或者調(diào)用屬性的setter為屬性賦值。但是在很多時(shí)候覺(jué)得這樣做很麻煩,最好的做法是在創(chuàng)建對(duì)象的時(shí)候完成屬性的初始化操作,此時(shí)需要使用到有參數(shù)構(gòu)造方法方能完成該功能(有人把構(gòu)造方法叫做構(gòu)造器)。
例子:(idea快捷鍵Alt+insert生成構(gòu)造方法和get、set等)
1、定義一個(gè)Student類

package com.hn.yuan.common;
/**
 * 有參構(gòu)造方法
 */
public class Student {
    private String name;
    private String age;
    public Student(String name, String age) {
        this.name = name;
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public String getAge() {
        return age;
    }
    public void start(){
        System.out.println("我叫"+name+"今年"+age+"歲了");
    }
}

2、定義一個(gè)Test類,來(lái)進(jìn)行查看運(yùn)行效果

package com.hn.yuan.common;
public class Test {
    public static void main(String[] args) {
        //使用有參數(shù)的構(gòu)造方法實(shí)例化對(duì)象
        Student st=new Student("張三","18");
        st.start();
    }
}

運(yùn)行效果

此時(shí)發(fā)現(xiàn)了我們不需要像之前一樣,要為對(duì)象的屬性賦值就必須先創(chuàng)建對(duì)象再使用“對(duì)象名.屬性名”或者使用setter 方法去實(shí)現(xiàn)了,而是直接使用有參數(shù)的構(gòu)造方法去實(shí)現(xiàn)。
3、定義原理呈現(xiàn)
在編寫(xiě)一個(gè)類時(shí)沒(méi)有添加無(wú)參構(gòu)造方法,那么編譯器會(huì)自動(dòng)添加無(wú)參構(gòu)造方法;(如果自己手動(dòng)添加構(gòu)造函數(shù),無(wú)論有參數(shù)或是沒(méi)參數(shù),默認(rèn)構(gòu)造函數(shù)都將無(wú)效)
編寫(xiě)時(shí)添加有參構(gòu)造方法而未添加無(wú)參構(gòu)造方法,那么編譯器只認(rèn)有參構(gòu)造方法而不會(huì)默認(rèn)添加無(wú)參構(gòu)造方法。
如果需要使用無(wú)參構(gòu)造方法,一定要在類里面添加。

無(wú)參構(gòu)造方法

作用:無(wú)參構(gòu)造方法一般是用來(lái)初始化:如為變量賦初值、初始化對(duì)象等。
在之前我們使用過(guò)方法,在調(diào)用的方法的是時(shí)候需要在方法名稱之后加.上小括號(hào),括號(hào)里面可以傳遞實(shí)參,那么我們?cè)趧?chuàng)建一個(gè)對(duì)象的時(shí)候使用的是“new類名()”的方式去實(shí)現(xiàn),其實(shí)上這也是一種方法,但是這個(gè)方法我們沒(méi)有明確的去定義,那為什么可以調(diào)用呢?觀察代碼。
例子:
1、首先,我們定義一個(gè)Student類

package com.hn.yuan.common;
/**
 * 無(wú)參構(gòu)造方法
 */
public class Student {
    private String name;
    private String age;
    //含有 無(wú)參構(gòu)造方法
    public Student() {
        System.out.println("調(diào)用了無(wú)參構(gòu)造方法");
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public String getAge() {
        return age;
    }
    public void start(){
        System.out.println("我叫"+name+"今年"+age+"歲了");
    }
}

2、定義一個(gè)Test類,來(lái)進(jìn)行查看運(yùn)行效果

package com.hn.yuan.common;
public class Test {
    public static void main(String[] args) {
        //使用有參數(shù)的構(gòu)造方法實(shí)例化對(duì)象
        Student st=new Student();
        System.out.println(st);
    }
}

運(yùn)行效果

定義四個(gè)類說(shuō)明情況(如果還不清晰請(qǐng)看)

類Person1 自己不手動(dòng)添加任何無(wú)參或有參數(shù)構(gòu)造方法 (實(shí)例化對(duì)象時(shí):編譯通過(guò))
類Person2 自己添加無(wú)參的構(gòu)造方法 (實(shí)例化對(duì)象時(shí):編譯通過(guò))
類Person3 有參數(shù)的構(gòu)造方法 (實(shí)例化對(duì)象時(shí):不通過(guò))
類Person4 自己添加無(wú)參的構(gòu)造方法,和有參數(shù)的構(gòu)造方法 (實(shí)例化對(duì)象時(shí):編譯通過(guò))

//定義類Person1   自己不手動(dòng)添加任何無(wú)參或有參數(shù)構(gòu)造方法
class Person1{
    private int age;
    private String name;
    private String sex;
}
//定義類Person2   自己添加無(wú)參的構(gòu)造方法
class Person2{
    private int age;
    private String name;
    private String sex;
    public Person2(){
        System.out.println("無(wú)參構(gòu)造方法被調(diào)用");
    }
}
//定義類Person3   有參數(shù)的構(gòu)造方法
class Person3{
    private int age;
    private String name;
    private String sex;
    public Person3(String name, String sex, int age ){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}
//定義類Person4   自己添加無(wú)參的構(gòu)造方法,和有參數(shù)的構(gòu)造方法
class Person4{
    private int age;
    private String name;
    private String sex;
    //不帶參數(shù)的構(gòu)造函數(shù),可以被重載
    public Person4(){
        System.out.println("無(wú)參構(gòu)造方法被調(diào)用");
    }
    //帶參數(shù)對(duì)的構(gòu)造函數(shù)
    public Person4(String name, String sex, int age ){
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}
public class ObjectInit_2 {
    public static void main(String[] args) {
        Person1 person1 = new Person1();//編譯通過(guò);①實(shí)例化Person對(duì)象    ②自動(dòng)調(diào)用構(gòu)造方法Person( )
        Person2 person2 = new Person2();//編譯通過(guò);打印: 無(wú)參構(gòu)造方法被調(diào)用
        // 這樣寫(xiě),編譯器會(huì)報(bào)錯(cuò),原因是系統(tǒng)默認(rèn)的無(wú)參構(gòu)造方法被有參構(gòu)造方法覆蓋,編譯器不能再提供無(wú)參構(gòu)造方法
        Person3 person3 = new Person3();
        //Person4 person4 = new Person4();//編譯通過(guò);打印: 無(wú)參構(gòu)造方法被調(diào)用
        Person4 person4 = new Person4("qzz", "man", 18);//編譯通過(guò);
    }
}

使用構(gòu)造器時(shí)
1、構(gòu)造器必須與類同名(如果一個(gè)源文件中有多個(gè)類,那么構(gòu)造器必須與公共類同名)
2、每個(gè)類可以有一個(gè)以上的構(gòu)造器
3、構(gòu)造器可以有0個(gè)、1個(gè)或1個(gè)以上的參數(shù)
4、構(gòu)造器沒(méi)有返回值
5、構(gòu)造器總是伴隨著new操作一起調(diào)用
父類有有參構(gòu)造方法有兩種情況,一只有有參構(gòu)造,那么子類的構(gòu)造方法中的第一句必須調(diào)用父類的有參構(gòu)造方法,也就是“super(…);”,…為你傳入的參數(shù)如:

class Father {
    public Father(String lastname) {
    }
}
class Son extends Father {
    public Son() {
        super("aaaa");// 這句必須有
// 可以寫(xiě)其他代碼
    }
}

二有有參也有無(wú)參構(gòu)造方法,這時(shí)子類不顯示調(diào)用super,這會(huì)默認(rèn)自動(dòng)調(diào)用父類無(wú)參的構(gòu)造方法,

class Father {
    public Father() {
    }
    public Father(String lastname) {
    }
}
class Son extends Father {
    public Son() {
        super();// 這句可以有也可以沒(méi)有,沒(méi)有寫(xiě)的話會(huì)自動(dòng)調(diào)用
        // 可以寫(xiě)其他代碼
    }
}

Lombok的基本使用

首先我們要了解的信息:
IntelliJ IDEA 2020.3及以上版本已經(jīng)內(nèi)置Lombok plugin了,所以不需要安裝插件,只需要在項(xiàng)目添加Lombok依賴就能用了。(如果按照其它人給的辦法通過(guò)非官方渠道安裝Lombok plugin,反而可能出現(xiàn)版本兼容問(wèn)題,所以IDEA 2020.3及以上版本的不要瞎搞去安裝Lombok plugin了)
同時(shí):lombok在2020.2就開(kāi)始斷更了,所以idea2021及之后的marketplace就不開(kāi)始支持lombok了
信息來(lái)源1(IDEA 2020.3的更新說(shuō)明):https://www.jetbrains.com/idea/whatsnew/2020-3/#page__content-other

image.png

開(kāi)始應(yīng)用:
注意:下載的版本要與idea版本對(duì)應(yīng),要不然可能會(huì)報(bào)錯(cuò)
1、官方下載之前對(duì)應(yīng)idea版本的lombok
第一種:直接lombok官方:lombok各個(gè)版本下載地址

image.png

第二種:打開(kāi)IDEA的File——setting——Plugins,搜索lombok,應(yīng)用即可。
(一般內(nèi)網(wǎng)狀態(tài)下,會(huì)給你個(gè)Lombok壓縮包,引入-應(yīng)用-即可)

image.png

2、使用Lombok
第一種引入方式:直接在maven中添加依賴

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!--這里由于采用springboot管理version,所以沒(méi)有version標(biāo)簽-->
        </dependency>

第二種引入方式:在需要的類上面加注解@Data,會(huì)爆紅
爆紅之后,鼠標(biāo)移到爆紅位置,選擇添加add ‘lombok’ to classpath即可,maven會(huì)自動(dòng)幫我們添加依賴。

例子:

package com.hn.yuan.common;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
 *  lombok的使用
 */
@Data
@AllArgsConstructor
public class Student {
    private String name;
    private String age;
}

常用注解作用:
@Data
等價(jià)于@Setter、@Getter、@RequiredArgsConstructor、@ToString、@EqualsAndHashCode

@NoArgsConstructor
@NoArgsConstructor在類上使用,這個(gè)注解可以生成無(wú)參構(gòu)造方法,如下所示:

/**
 * 編譯前代碼
 */
@RequiredArgsConstructor
public class Student() {
    private String name;
    private String age;
}
/**
 * 編譯后代碼
 */
public class Student() {
    private String name;
    private String age;
    public Student() {
    }
}

@AllArgsConstructor
@AllArgsConstructor在類上使用,這個(gè)注解可以生成全參構(gòu)造函數(shù),且默認(rèn)不生成無(wú)參構(gòu)造函數(shù)。
不過(guò)需要注意的是,這里所說(shuō)的全參并不包括已經(jīng)被初始化的被final關(guān)鍵字修飾的字段,因?yàn)樽侄我坏┍籪inal關(guān)鍵字修飾被賦值后就不能再被修改,如下所示:

/**
 * 編譯前代碼
 */
@RequiredArgsConstructor
public class Student() {
    private final String gender;
    private final Integer ages = 18;
    private String name;
    private String age;
}
/**
 * 編譯后代碼
 */
public class Student() {
    private final String gender;
    private final Integer ages = 18;
    private String name;
    private String age;
    public Student(String gender, String name, String age) {
        this.gender = gender;
        this.name = name;
        this.age = age;
    }
}

@AllArgsConstructor :注在類上,提供類的全參構(gòu)造
@NoArgsConstructor :注在類上,提供類的無(wú)參構(gòu)造
@Setter :注在屬性上,提供 set 方法
@Getter :注在屬性上,提供 get 方法
@EqualsAndHashCode :注在類上,提供對(duì)應(yīng)的 equals 和 hashCode 方法
@Log4j/@Slf4j :注在類上,提供對(duì)應(yīng)的 Logger 對(duì)象,變量名為 log

到此這篇關(guān)于Java有參構(gòu)造方法與無(wú)參構(gòu)造方法(完全理解)的文章就介紹到這了,更多相關(guān)Java有參構(gòu)造方法與無(wú)參構(gòu)造方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的流式編程問(wèn)題

    Java中的流式編程問(wèn)題

    這篇文章主要介紹了Java中的流式編程問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 深度解析SpringBoot中@Async引起的循環(huán)依賴

    深度解析SpringBoot中@Async引起的循環(huán)依賴

    本文主要介紹了深度解析SpringBoot中@Async引起的循環(huán)依賴,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 深入分析Spring BeanDefinition的構(gòu)造元信息

    深入分析Spring BeanDefinition的構(gòu)造元信息

    Bean Definition是一個(gè)包含Bean元數(shù)據(jù)的對(duì)象,它描述了如何創(chuàng)建Bean實(shí)例、Bean屬性的值以及Bean之間的依賴關(guān)系,本文將帶大家深入分析Spring BeanDefinition的構(gòu)造元信息,需要的朋友可以參考下
    2024-01-01
  • mybatis中方法返回泛型與resultType不一致的解決

    mybatis中方法返回泛型與resultType不一致的解決

    這篇文章主要介紹了mybatis中方法返回泛型與resultType不一致的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot中使用MyBatis-Plus詳細(xì)步驟

    SpringBoot中使用MyBatis-Plus詳細(xì)步驟

    MyBatis-Plus是MyBatis的增強(qiáng)工具,簡(jiǎn)化了MyBatis的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • SpringBoot整合Security權(quán)限控制登錄首頁(yè)

    SpringBoot整合Security權(quán)限控制登錄首頁(yè)

    這篇文章主要為大家介紹了SpringBoot整合Security權(quán)限控制登錄首頁(yè)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • JAVA編程實(shí)現(xiàn)隨機(jī)生成指定長(zhǎng)度的密碼功能【大小寫(xiě)和數(shù)字組合】

    JAVA編程實(shí)現(xiàn)隨機(jī)生成指定長(zhǎng)度的密碼功能【大小寫(xiě)和數(shù)字組合】

    這篇文章主要介紹了JAVA編程實(shí)現(xiàn)隨機(jī)生成指定長(zhǎng)度的密碼功能,可生成帶有大小寫(xiě)和數(shù)字組合的隨機(jī)字符串,需要的朋友可以參考下
    2017-07-07
  • 手把手教你如何在idea中搭建SpringBoot項(xiàng)目

    手把手教你如何在idea中搭建SpringBoot項(xiàng)目

    這篇文章主要介紹了如何搭建一個(gè)SpringBoot項(xiàng)目,包括環(huán)境準(zhǔn)備、創(chuàng)建新項(xiàng)目、探索項(xiàng)目結(jié)構(gòu)以及展望未來(lái),通過(guò)詳細(xì)的步驟和實(shí)用的技巧,幫助開(kāi)發(fā)者快速上手SpringBoot開(kāi)發(fā),文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Spring Boot 微服務(wù)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)代碼

    Spring Boot 微服務(wù)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)代碼

    這篇文章主要介紹了本文介紹了SpringBoot微服務(wù)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)的核心概念與使用方法,重點(diǎn)內(nèi)容包括微服務(wù)架構(gòu)的定義與特點(diǎn)、SpringBoot與微服務(wù)的集成、SpringBoot與微服務(wù)的配置和基本方法,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • 將Mybatis升級(jí)為Mybatis-Plus的詳細(xì)過(guò)程

    將Mybatis升級(jí)為Mybatis-Plus的詳細(xì)過(guò)程

    本文詳細(xì)介紹了在若依管理系統(tǒng)(v3.8.8)中將MyBatis升級(jí)為MyBatis-Plus的過(guò)程,旨在提升開(kāi)發(fā)效率,通過(guò)本文,開(kāi)發(fā)者可實(shí)現(xiàn)系統(tǒng)功能無(wú)損升級(jí),同時(shí)享受MyBatis-Plus帶來(lái)的便捷特性,如代碼簡(jiǎn)化和性能優(yōu)化,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

莎车县| 渑池县| 定州市| 秦皇岛市| 泸溪县| 旬阳县| 温宿县| 南昌县| 闸北区| 吴江市| 棋牌| 邢台县| 孟村| 晋宁县| 丰顺县| 章丘市| 新沂市| 景谷| 三都| 攀枝花市| 西盟| 云安县| 嘉善县| 且末县| 衡东县| 乐东| 兴隆县| 岳池县| 海门市| 大港区| 团风县| 交城县| 汉源县| 丹阳市| 屯昌县| 溧水县| 彭山县| 武乡县| 施甸县| 平遥县| 临海市|