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

Java單例模式繼承覆蓋多態(tài)原理詳解

 更新時(shí)間:2020年09月28日 10:05:29   作者:愛笑的berg  
這篇文章主要介紹了Java單例模式繼承覆蓋多態(tài)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1、單例模式:

1)提出原因

  是由gof 也就是四人組提出來的。為了保證jvm中某一類型的java對(duì)象永遠(yuǎn)只有一個(gè),同時(shí)也是為了節(jié)省內(nèi)存的開銷。因?yàn)橥饷娉绦蚩梢酝ㄟ^new的方法直接調(diào)用類里面的構(gòu)造方法。導(dǎo)致該類的對(duì)象不止一個(gè)。

2)定義

  單例模式的意思就是只有一個(gè)實(shí)例。單例模式確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。這個(gè)類稱為單例類。

A、構(gòu)造方法私有化;

B、對(duì)外提供一個(gè)公開的、靜態(tài)的、獲取當(dāng)前類型對(duì)象的方法

C、提供一個(gè)當(dāng)前類型的靜態(tài)變量。

3)分類

A、餓漢式單例模式:在類加載時(shí)就完成了初始化,所以類加載較慢,但獲取對(duì)象的速度快

public class CustomerSingleton {
  private static CustomerSingleton instance = new CustomerSingleton();//靜態(tài)私有成員,已初始化
  
  private CustomerSingleton()
  {
    //私有構(gòu)造函數(shù)
   System.out.println("私有構(gòu)造函數(shù)執(zhí)行");
  }
  
  public static CustomerSingleton getCustomerInstance()  //靜態(tài),不用同步(類加載時(shí)已初始化,不會(huì)有多線程的問題)
  {
    return instance;
  }
}

B、懶漢式單例:類加載時(shí)不初始化

當(dāng)調(diào)用getInstance方法的時(shí)候,底層的對(duì)象才會(huì)考慮創(chuàng)建,所以顯得比較懶

public class UserSingleton {
   //提供一個(gè)當(dāng)前類型的靜態(tài)變量
   public static UserSingleton intance=null;
 
   //構(gòu)造方法私有化
   private UserSingleton(){
    System.out.println("構(gòu)造函數(shù)私有化");
   }
 
   //對(duì)外提供一個(gè)公開獲取Singleton 對(duì)象的方法
   public static UserSingleton getInstance(){
     if(intance==null){
      intance=new UserSingleton();
   }
    return intance;
   }
}

2、繼承

1)繼承的語法:java中類只支持單繼承,一個(gè)類繼承了A類就無法再繼承B類,繼承是面向?qū)ο蟮闹匾拍?。一個(gè)類沒有現(xiàn)實(shí)的繼承其他類,默認(rèn)繼承sun提供的java.lang.object

   [修飾符列表] class 子類名 extends 父類名{
    類體;

  }

備注:

java語言中子類繼承父類,會(huì)將父類中所有的數(shù)據(jù)全部繼承,包括私有的也能繼承過來;

但是在子類中無法直接訪問父類中的私有數(shù)據(jù)。但是可以間接訪問,構(gòu)造方法無法被子類繼承。

3、方法的覆蓋

1)什么時(shí)候方法要進(jìn)行覆蓋?

如果父類中的方法已經(jīng)無法滿足當(dāng)前子類的業(yè)務(wù)需求,需要將父類中的方法進(jìn)行覆蓋重新子類如果重寫父類的方法之后,子類對(duì)象一定調(diào)用的是重寫之后的方法。覆蓋指的是成員方法和成員變量無關(guān)。

2)發(fā)生方法覆蓋的條件:

  • 第一:發(fā)生在具有繼承關(guān)系的兩個(gè)類之間
  • 第二:必須具有相同的方法名,相同的返回值類型,相同的參數(shù)列表
  • 第三:重寫的方法不能比被重寫的方法擁有更低的訪問權(quán)限
  • 第四:重寫的方法不能比被重寫的方法拋出更寬泛的異常
  • 第五:私有的方法不能被覆蓋(因?yàn)樗接蟹椒o法被子類訪問,所以不能重寫;必須是public的方法才能被覆蓋,如果定義成了final是不可以被重寫的)
  • 第六:構(gòu)造方法無法被覆蓋,因?yàn)闃?gòu)造方法無法被繼承。
  • 第七:靜態(tài)的方法不存在覆蓋
  • 第八:覆蓋指的是成員方法,和成員變量無關(guān)。

4、多態(tài)

向上轉(zhuǎn)型:子轉(zhuǎn)父(父類型的引用,指向子類型的對(duì)象);

向下轉(zhuǎn)型:父轉(zhuǎn)子(子類型的引用,指向父類型的對(duì)象);

多態(tài)編譯期是靜態(tài)綁定,而運(yùn)行期是動(dòng)態(tài)綁定

5、多態(tài)的經(jīng)典例子

public class Person {
   public void feed (Animal a){
    a.eat();
   }
}

public class Animal {
   public void eat(){
 
   }
}

public class Dog extends Animal {
   public void eat(){
     System.out.println("狗在吃肉");
   }
}

public class Cat extends Animal {
   public void eat(){
     System.out.println("貓?jiān)诔贼~");
   }
}

public class Test01 {
   public static void main(String[] args) {
     Person p1=new Person();
      Dog d1=new Dog();
     Cat c1=new Cat();
     p1.feed(d1);
     p1.feed(c1);
   }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot中@PostConstruct 注解的實(shí)現(xiàn)

    SpringBoot中@PostConstruct 注解的實(shí)現(xiàn)

    在Spring Boot框架中,?@PostConstruct是一個(gè)非常有用的注解,它用于在依賴注入完成后執(zhí)行初始化方法,本文將介紹?@PostConstruct的基本概念、使用場景以及提供詳細(xì)的代碼示例,感興趣的可以了解一下
    2024-09-09
  • gateway網(wǎng)關(guān)與前端請求跨域問題的解決方案

    gateway網(wǎng)關(guān)與前端請求跨域問題的解決方案

    這篇文章主要介紹了gateway網(wǎng)關(guān)與前端請求跨域問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot實(shí)現(xiàn)接口文檔自動(dòng)生成的方法示例

    SpringBoot實(shí)現(xiàn)接口文檔自動(dòng)生成的方法示例

    在開發(fā)Web應(yīng)用程序時(shí),接口文檔是非常重要的一環(huán),本文主要介紹了SpringBoot實(shí)現(xiàn)接口文檔自動(dòng)生成的方法示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • jmeter壓力測試工具簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    jmeter壓力測試工具簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了jmeter壓力測試工具相關(guān)介紹資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Java Arrays.fill()的具體使用

    Java Arrays.fill()的具體使用

    本文主要介紹了Java Arrays.fill()的具體使用,更好地理解Arrays.fill()方法的用法以及在實(shí)際應(yīng)用中如何使用它,感興趣的可以了解一下
    2023-09-09
  • java final本質(zhì)詳解

    java final本質(zhì)詳解

    在本篇文章里小編給大家分享的是關(guān)于java final本質(zhì)的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09
  • java 和 json 對(duì)象間轉(zhuǎn)換

    java 和 json 對(duì)象間轉(zhuǎn)換

    這篇文章主要介紹了java 和 json 對(duì)象間轉(zhuǎn)換,需要的朋友可以參考下
    2014-03-03
  • Java?方法的重載與參數(shù)傳遞詳解

    Java?方法的重載與參數(shù)傳遞詳解

    在java中,方法就是用來完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過程中,會(huì)包含很多條語句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來探究一下方法的重載與傳參
    2022-04-04
  • Springboot整合RabbitMQ實(shí)現(xiàn)發(fā)送驗(yàn)證碼的示例代碼

    Springboot整合RabbitMQ實(shí)現(xiàn)發(fā)送驗(yàn)證碼的示例代碼

    這篇文章主要介紹了Springboot整合RabbitMQ實(shí)現(xiàn)發(fā)送驗(yàn)證碼的功能,基于AMQP協(xié)議實(shí)現(xiàn)的消息隊(duì)列,它是一種應(yīng)用程序之間的通信方法,消息隊(duì)列在分布式系統(tǒng)開 發(fā)中應(yīng)用非常廣泛,需要的朋友可以參考下
    2022-02-02
  • SpringMVC4.3?HttpMessageConverter接口實(shí)現(xiàn)源碼分析

    SpringMVC4.3?HttpMessageConverter接口實(shí)現(xiàn)源碼分析

    這篇文章主要為大家介紹了SpringMVC4.3?HttpMessageConverter接口實(shí)現(xiàn)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論

茶陵县| 万荣县| 定州市| 凉城县| 泸州市| 吉木萨尔县| 霍邱县| 洛川县| 永靖县| 工布江达县| 锡林郭勒盟| 汕头市| 涟源市| 法库县| 晴隆县| 青岛市| 阿瓦提县| 富川| 佛山市| 商洛市| 郁南县| 台东县| 南昌县| 建水县| 三都| 皮山县| 类乌齐县| 铁力市| 中牟县| 远安县| 凤庆县| 探索| 北安市| 辽宁省| 奈曼旗| 武邑县| 上饶县| 玉林市| 洪雅县| 泸溪县| 扬州市|