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

JAVA面向?qū)ο笾^承?super入門(mén)解析

 更新時(shí)間:2022年01月23日 15:42:58   作者:程序媛?泡泡  
在JAVA類(lèi)中使用super來(lái)引用父類(lèi)的成分,用this來(lái)引用當(dāng)前對(duì)象,如果一個(gè)類(lèi)從另外一個(gè)類(lèi)繼承,我們new這個(gè)子類(lèi)的實(shí)例對(duì)象的時(shí)候,這個(gè)子類(lèi)對(duì)象里面會(huì)有一個(gè)父類(lèi)對(duì)象。怎么引用里面的父類(lèi)對(duì)象呢?用super來(lái)引用,this指當(dāng)前對(duì)象的引用,super是當(dāng)前對(duì)象里面的父對(duì)象的引用

1 繼承

1.1概念

繼承是面向?qū)ο笞铒@著的一個(gè)特征 繼承是從已有的類(lèi)中派生出新的類(lèi),新類(lèi)能吸收已有類(lèi)的數(shù)據(jù)屬性和行為,并擴(kuò)展新的能力. Java繼承是會(huì)用已存在的類(lèi)的定義作為基礎(chǔ)建立新類(lèi)的技術(shù) 新類(lèi)的定義可以增加新的數(shù)據(jù)或者新的功能,也可以使用父類(lèi)的功能,但不能選擇性的繼承父類(lèi)(超類(lèi)/基類(lèi)) 這種繼承使得復(fù)用以前的代碼非常容易,能夠大大的縮短開(kāi)發(fā)的周期,降低開(kāi)發(fā)費(fèi)用.

1.2 特點(diǎn)

  • 使用extends關(guān)鍵字來(lái)表示繼承關(guān)系
  • 相當(dāng)于子類(lèi)把父類(lèi)的功能復(fù)制了一份
  • Java只支持單繼承
  • 繼承可以傳遞(爺爺/兒子/孫子這樣的關(guān)系)
  • 父類(lèi)的私有成員由于私有限制訪問(wèn),所以子類(lèi)不能使用父類(lèi)的私有資源
  • 繼承多用于功能的修改,子類(lèi)可以在擁有父類(lèi)功能的同時(shí),進(jìn)行功能拓展
  • 像是is a的關(guān)系

1.3 練習(xí):繼承入門(mén)案例

創(chuàng)建包: cn.tedu.oop2

創(chuàng)建類(lèi): TestExtends.java

package cn.tedu.oop2;
/*本類(lèi)用于繼承的入門(mén)案例*/
public class TestExtends {
    public static void main(String[] args) {
        //5.分別創(chuàng)建3個(gè)類(lèi)的對(duì)象
        Animal a = new Animal();
        Cat c = new Cat();
        MiaoMiao m = new MiaoMiao();
        //6.利用對(duì)象調(diào)用方法進(jìn)行測(cè)試
        /*3.繼承相當(dāng)于是子類(lèi)將父類(lèi)的功能復(fù)制了一份
        繼承還具有傳遞性,爺爺?shù)墓δ軙?huì)傳給爸爸,爸爸的功能會(huì)傳給孫子*/
        a.eat();//爺爺類(lèi)使用自己的方法
        c.eat();//爸爸類(lèi)可以使用從爺爺類(lèi)中繼承過(guò)來(lái)的方法
        m.eat();//孫子類(lèi)也可以使用從爺爺類(lèi)中繼承過(guò)來(lái)的方法
    }
}
/*1.我們通過(guò)extends關(guān)鍵字建立子類(lèi)與父類(lèi)的繼承關(guān)系,格式:子類(lèi) extends 父類(lèi)*/
/*2.Java只支持單繼承,一個(gè)子類(lèi)只能有一個(gè)父類(lèi),但是一個(gè)父類(lèi)可以有多個(gè)子類(lèi)*/
//1.創(chuàng)建小動(dòng)物類(lèi)--爺爺類(lèi)
class Animal{
    //4.添加爺爺類(lèi)的普通方法
    public void eat(){
        System.out.println("小動(dòng)物Animal吃啥都行~");
    }
}
//2.創(chuàng)建小貓類(lèi)--爸爸類(lèi)
/*6.繼承是is a的關(guān)系,比如小貓是小動(dòng)物,MiaoMiao是一只小貓
* 繼承要求子類(lèi)必須是父類(lèi)的一種下屬類(lèi)型,依賴(lài)性非常強(qiáng),強(qiáng)耦合*/
class Cat extends Animal{
    //7.定義爸爸類(lèi)中的屬性
    int a = 10;//普通屬性
    private int b = 100;//私有屬性
}
//3.創(chuàng)建MiaoMiao類(lèi)--孫子類(lèi)
class MiaoMiao extends Cat{
    /*4.子類(lèi)可以擁有自己獨(dú)有的方法,實(shí)現(xiàn)了功能的拓展,青出于藍(lán)而勝于藍(lán)*/
    //8.定義孫子類(lèi)的方法
    public void studyJava(){
        System.out.println("正在學(xué)Java");
        System.out.println(a);
        /*5.子類(lèi)繼承了父類(lèi)以后,可以使用父類(lèi)的所有非私有資源
        * 注意:這個(gè)私有資源由于被private修飾,所以沒(méi)有訪問(wèn)權(quán)限*/
        //System.out.println(b);//不可以,私有資源被限制訪問(wèn)
    }
}

2 super

我們可以把super看作是父類(lèi)的對(duì)象:Father super = new Father();

1.當(dāng)父類(lèi)的成員變量與子類(lèi)的變量同名時(shí),使用super指定父類(lèi)的成員變量

2.使用super在子類(lèi)構(gòu)造方法的第一行調(diào)用父類(lèi)構(gòu)造方法的功能

super();–調(diào)用的是父類(lèi)的無(wú)參構(gòu)造

super(參數(shù));–調(diào)用的是父類(lèi)對(duì)應(yīng)參數(shù)的構(gòu)造方法

注意:在構(gòu)造方法里,出現(xiàn)的調(diào)用位置必須是第一行

3 繼承的用法

3.1 練習(xí):super之繼承中成員變量使用

創(chuàng)建包: cn.tedu.oopextends

創(chuàng)建類(lèi): TestExtends1.java

package cn.tedu.oop2;
/*本類(lèi)用于測(cè)試?yán)^承中變量的使用*/
public class ExtendsDemo1 {
    public static void main(String[] args) {
        //7.創(chuàng)建子類(lèi)的匿名對(duì)象,調(diào)用study()
        new Son().study();
    }
}
//1.創(chuàng)建父類(lèi)
class Father{
    //3.創(chuàng)建父類(lèi)的成員變量
    int sum = 1;
    int count = 2;

}
//2.創(chuàng)建子類(lèi)
class Son extends Father{
    //4.創(chuàng)建子類(lèi)的成員變量
    int sum = 10;
    //5.創(chuàng)建子類(lèi)的普通方法
    public void study(){
        System.out.println("goog good study , day day up");
        //6.創(chuàng)建子類(lèi)的局部變量
        int sum = 100;
        //8.打印子類(lèi)的局部變量sum
        System.out.println(sum);//100
        //9.打印子類(lèi)的成員變量sum
        System.out.println(this.sum);//10
        //10.打印父類(lèi)的成員變量sum
        /*當(dāng)父類(lèi)的成員變量與子類(lèi)的成員變量同名時(shí),可以使用super指定父類(lèi)的成員變量
        * 我們可以把super看作是父類(lèi)的對(duì)象:Father super = new Father();*/
        System.out.println(super.sum);//1
        System.out.println(count);
    }
}

3.2 練習(xí):super之繼承中構(gòu)造方法的使用

創(chuàng)建包: cn.tedu.oop2

創(chuàng)建類(lèi): ExtendsDemo2.java

package cn.tedu.oop2;
/*本類(lèi)用于測(cè)試?yán)^承中構(gòu)造方法的使用
* 1.子類(lèi)在創(chuàng)建對(duì)象時(shí),默認(rèn)會(huì)先調(diào)用父類(lèi)的構(gòu)造方法
* 2.原因是子類(lèi)構(gòu)造函數(shù)中的第一行默認(rèn)存在super();--表示調(diào)用父類(lèi)的無(wú)參構(gòu)造
* 3.當(dāng)父類(lèi)沒(méi)有無(wú)參構(gòu)造時(shí),可以通過(guò)super(參數(shù))調(diào)用父類(lèi)的其他含參構(gòu)造
* 子類(lèi)必須調(diào)用一個(gè)父類(lèi)的構(gòu)造函數(shù),不管是無(wú)參還是含參,選一個(gè)即可
* 4.構(gòu)造方法不可以被繼承!因?yàn)檎Z(yǔ)法的原因:要求構(gòu)造方法的名字必須是本類(lèi)類(lèi)名
* 不能在子類(lèi)中出現(xiàn)一個(gè)父類(lèi)名字的構(gòu)造方法*/
public class ExtendsDemo2 {
    public static void main(String[] args) {
        //6.1通過(guò)父類(lèi)的無(wú)參構(gòu)造創(chuàng)建父類(lèi)對(duì)象
        //Father2 f = new Father2();
        //6.2通過(guò)父類(lèi)的含參構(gòu)造創(chuàng)建父類(lèi)對(duì)象
        //Father2 f2 = new Father2("哈哈哈");
        //7.創(chuàng)建子類(lèi)對(duì)象
        Son2 s = new Son2();
    }
}
//1.創(chuàng)建父類(lèi)
class Father2{
    //3.創(chuàng)建父類(lèi)的無(wú)參構(gòu)造
//    public Father2(){
//        System.out.println("我是父類(lèi)的無(wú)參構(gòu)造");
//    }
    //4.創(chuàng)建父類(lèi)的含參構(gòu)造
    public Father2(String s){
        System.out.println("我是父類(lèi)的含參構(gòu)造"+s);
    }
}
//2.創(chuàng)建子類(lèi)
class Son2 extends Father2{
    //5.創(chuàng)建子類(lèi)的無(wú)參構(gòu)造
    public Son2(){
        //super();//調(diào)用父類(lèi)的無(wú)參構(gòu)造
        super("你好~");
        System.out.println("我是子類(lèi)的無(wú)參構(gòu)造");
    }
}

4 方法重寫(xiě)Override

繼承以后,子類(lèi)就擁有了父類(lèi)的功能

在子類(lèi)中,可以添加子類(lèi)特有的功能,也可以修改父類(lèi)的原有功能

子類(lèi)中方法的簽名與父類(lèi)完全一樣時(shí),會(huì)發(fā)生覆蓋/復(fù)寫(xiě)的現(xiàn)象

注意: 父類(lèi)的私有方法不能被重寫(xiě)

重寫(xiě)的要求:兩同兩小一大

兩同:方法名 參數(shù)列表 要完全一致

兩小:

子類(lèi)返回值類(lèi)型小于等于父類(lèi)的返回值類(lèi)型(注意此處說(shuō)的是繼承關(guān)系,不是值大小)

子類(lèi)拋出異常小于等于父類(lèi)方法拋出異常

一大:子類(lèi)方法的修飾符權(quán)限要大于等于父類(lèi)被重寫(xiě)方法的修飾符權(quán)限

4.1 練習(xí):繼承中成員方法的使用

創(chuàng)建包: cn.tedu.oop2

創(chuàng)建類(lèi): ExtendsDemo3.java

package cn.tedu.oop2;
/*本類(lèi)用于測(cè)試?yán)^承中方法的使用*/
public class ExtendsDemo3 {
    public static void main(String[] args) {
        //4.創(chuàng)建對(duì)象進(jìn)行測(cè)試
        Father f = new Father();
        Son s = new Son();
        f.eat();
        s.eat();
        f.play();
        s.play();
    }
}
//1.創(chuàng)建父類(lèi)
class Father{
    //3.定義父類(lèi)中的普通方法
    public void eat(){
        System.out.println("爸爸愛(ài)吃肉");
    }
    public void play(){
        System.out.println("爸爸愛(ài)放風(fēng)箏");
    }
}
//2.創(chuàng)建子類(lèi)
class Son extends Father{
    //5.如果子類(lèi)對(duì)父類(lèi)的方法不滿(mǎn)意,可以重寫(xiě)父類(lèi)的方法
    /*重寫(xiě)的原則:兩同 兩小 一大
    * 兩同:子類(lèi)方法的 方法名與參數(shù)列表 和父類(lèi)方法的相同
    * 一大:子類(lèi)方法的 方法修飾符權(quán)限 >= 父類(lèi)方法的
    * 兩?。鹤宇?lèi)方法的返回值類(lèi)型 <= 父類(lèi)方法的返回值類(lèi)型
    * 注意:這里所說(shuō)的<=是指子類(lèi)方法的返回值類(lèi)型是父類(lèi)返回值類(lèi)型的子類(lèi)
    * 或者與父類(lèi)的返回值類(lèi)型一致,如果父類(lèi)方法的返回值類(lèi)型是void,子類(lèi)保持一致即可
    * */
    @Override //注解,用來(lái)加在方法上,表示這是一個(gè)重寫(xiě)的方法
    public void eat(){
        System.out.println("兒子愛(ài)吃蔬菜");
    }
    @Override
    public void play(){
        System.out.println("兒子愛(ài)玩游戲");
    }
}

5 拓展

5.1 繼承的好處與壞處

繼承的好處

提高了代碼的復(fù)用性(多個(gè)類(lèi)相同的成員可以放在同一個(gè)類(lèi)中)

提高了代碼的維護(hù)性(如果方法的代碼需要修改,只修改一處即可)

繼承的壞處

繼承讓類(lèi)與類(lèi)建立了關(guān)系,類(lèi)的耦合性增強(qiáng)

當(dāng)父類(lèi)發(fā)生變化時(shí),子類(lèi)實(shí)現(xiàn)也不得不跟著變化,削弱了子類(lèi)的獨(dú)立性

5.2 this與super的區(qū)別

this: 代表本類(lèi)對(duì)象的引用

我們可以把this看作是Cat this = new Cat();

super:代表父類(lèi)存儲(chǔ)空間的標(biāo)識(shí),可以理解成父類(lèi)對(duì)象的引用

可以把super看作是Father super = new Father();

this關(guān)鍵字指向調(diào)用該方法的對(duì)象

一般我們是在當(dāng)前類(lèi)中使用this關(guān)鍵字

所以我們常說(shuō)this代表本類(lèi)對(duì)象的引用

注意:super的使用前提是繼承,沒(méi)有父子類(lèi)關(guān)系,就沒(méi)有super

注意:this調(diào)用構(gòu)造方法或者super調(diào)用構(gòu)造方法,都必須出現(xiàn)在構(gòu)造方法的第一行

注意:如果父類(lèi)沒(méi)有無(wú)參構(gòu)造,需要手動(dòng)在子類(lèi)構(gòu)造方法的第一行調(diào)用其他的含參構(gòu)造

拓展:如果子類(lèi)重寫(xiě)了父類(lèi)的方法以后,可以使用super.方法名(參數(shù)列表)來(lái)調(diào)用

5.3 重載Overload與重寫(xiě)Override的區(qū)別

重載:在一個(gè)類(lèi)中的現(xiàn)象:同一個(gè)類(lèi)中,存在方法名相同,參數(shù)列表不同的方法

重寫(xiě):是指建立了繼承關(guān)系以后,子類(lèi)對(duì)父類(lèi)的方法不滿(mǎn)意,可以重寫(xiě),遵循兩同兩小一大原則

重載的意義:是為了外界調(diào)用方法時(shí)方便,不管傳入什么樣的參數(shù),都可以匹配到對(duì)應(yīng)的同名方法

重寫(xiě)的意義:在不修改源碼的情況下,進(jìn)行功能的修改與拓展(OCP原則:面向修改關(guān)閉,面向拓展開(kāi)放)

到此這篇關(guān)于JAVA面向?qū)ο笾^承 super入門(mén)解析的文章就介紹到這了,更多相關(guān)JAVA 繼承 super內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談在Java中使用Callable、Future進(jìn)行并行編程

    淺談在Java中使用Callable、Future進(jìn)行并行編程

    這篇文章主要介紹了淺談在Java中使用Callable、Future進(jìn)行并行編程,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java 中的類(lèi)和對(duì)象詳情

    Java 中的類(lèi)和對(duì)象詳情

    這篇文章主要介紹了Java 中的類(lèi)和對(duì)象,類(lèi)可以看成是創(chuàng)建Java對(duì)象的模板,下面文章圍繞著Java 類(lèi)與對(duì)象詳細(xì)內(nèi)容展開(kāi),需要的朋友可以參考一下
    2021-11-11
  • Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢(xún)?yōu)镹ull)

    Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢(xún)?yōu)镹ull)

    這篇文章主要介紹了Mybatis plus關(guān)閉駝峰命名的四種方法(防止出現(xiàn)查詢(xún)?yōu)镹ull),數(shù)據(jù)庫(kù)的字段命名方式為使用下劃線連接,對(duì)應(yīng)的實(shí)體類(lèi)應(yīng)該是駝峰命名方式,而我使用的是和數(shù)據(jù)庫(kù)同樣的命名方式,需要的朋友可以參考下
    2022-01-01
  • 關(guān)于RabbitMQ的Channel默認(rèn)線程

    關(guān)于RabbitMQ的Channel默認(rèn)線程

    這篇文章主要介紹了關(guān)于RabbitMQ的Channel默認(rèn)線程,通過(guò)jvm工具觀察rabbitmq的線程使用情況,發(fā)現(xiàn)生產(chǎn)者每發(fā)一條消息,消費(fèi)者這邊就會(huì)創(chuàng)建一條線程,言下之意,一個(gè)channel當(dāng)消息來(lái)到時(shí)就會(huì)異步處理這些消息,需要的朋友可以參考下
    2023-09-09
  • springboot調(diào)用HTML文件注意事項(xiàng)及說(shuō)明

    springboot調(diào)用HTML文件注意事項(xiàng)及說(shuō)明

    這篇文章主要介紹了springboot調(diào)用HTML文件注意事項(xiàng)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring Boot Hazelcast Caching 使用和配置詳解

    Spring Boot Hazelcast Caching 使用和配置詳解

    這篇文章主要介紹了Spring Boot Hazelcast Caching 使用和配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • druid連接池的參數(shù)配置示例全面解析

    druid連接池的參數(shù)配置示例全面解析

    這篇文章主要為大家介紹了druid連接池的參數(shù)配置示例全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 如何使用Java生成具有安全哈希的QR碼

    如何使用Java生成具有安全哈希的QR碼

    這篇文章主要介紹了如何使用Java生成具有安全哈希的QR碼,這是關(guān)于如何在Java中使用salt生成QR代碼和安全散列字符串的分步教程。,需要的朋友可以參考下
    2019-06-06
  • Java實(shí)戰(zhàn)之酒店人事管理系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之酒店人事管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何用Java實(shí)現(xiàn)酒店人事管理系統(tǒng),文中采用的技術(shù)有:JSP、Spring、SpringMVC、MyBatis等,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-03-03
  • 將一個(gè)數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法

    將一個(gè)數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法

    下面小編就為大家?guī)?lái)一篇將一個(gè)數(shù)組按照固定大小進(jìn)行拆分成數(shù)組的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11

最新評(píng)論

正阳县| 灌阳县| 留坝县| 五原县| 阳江市| 石嘴山市| 克拉玛依市| 嘉义县| 南澳县| 北票市| 奉新县| 湄潭县| 岗巴县| 南乐县| 重庆市| 吐鲁番市| 鄢陵县| 峡江县| 芜湖市| 呼伦贝尔市| 鄱阳县| 娄底市| 和政县| 合江县| 鸡东县| 东源县| 应用必备| 谢通门县| 肃南| 蓝山县| 泗阳县| 西盟| 中江县| 临汾市| 理塘县| 上杭县| 蚌埠市| 永靖县| 偏关县| 丰顺县| 农安县|