欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java圖文分析之繼承內(nèi)存布局

 更新時(shí)間:2022年09月09日 16:46:32   作者:new?Handsome()  
這篇文章主要介紹了Java圖文分析之繼承內(nèi)存布局,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下

一、初步了解繼承的內(nèi)存布局

(1) 繼承內(nèi)存布局初探

看下面擁有繼承關(guān)系的代碼,并畫出內(nèi)存布局圖:

public class Person {
    public int age;

    public void smile() {
        System.out.println("Person_smile()_age_" + age);
    }
}

class Student extends Person {
    public double score;

    public void study() {
        System.out.println("Student_study()_score_" + score);
    }
}

class MainTest {
    public static void main(String[] args) {
        Student s = new Student();
        s.score = 95.5;
        s.age = 8;
        // Person_smile()_age_8
        s.smile();
        // Student_study()_score_95.5
        s.study();

        Person p = new Person();
        p.age = 15;
        // Person_smile()_age_15
        p.smile();
    }
}

?? 通過(guò) 上篇文章 Java 的訪問(wèn)修飾符public,protected,private(封裝、繼承)可以知道:Student 類通過(guò) extends 關(guān)鍵字繼承了 Person 類后,Student 類中便擁有了 Person 類中非 private 的成員變量和成員方法。因此,Student 對(duì)象的引用 student 可以訪問(wèn)到父類(Person)的 age 屬性和 smile 方法 ??

繼承的內(nèi)存布局圖:

  •  Student 類繼承 Person 類后會(huì)擁有 Person 類中的 age 屬性,age 屬性在 Student 對(duì)象的內(nèi)存中也擁有一份
  • Student 對(duì)象的內(nèi)存和 Person 對(duì)象的內(nèi)存各種獨(dú)占,互不干擾

(2) Object 類

?? 任何類最終都繼承自 java.lang.Object 類(Object 類叫做基類

The Object class, in the java.lang package, sits at the top of the class hierarchy(層次體系) tree. Every class is a descendant(派生、后代), direct or indirect, of the Object class.

【翻譯】 java.lang 包中的 Object 類位于類繼承體系數(shù)的頂端。每一個(gè)類都是 Object 類的直接或間接派生類(子類)。

(3) 同名的成員變量

Java 允許子類定義和父類同名的成員變量(不推薦

public class Person {
    public int money = 10000;
}

class Teacher extends Person {
    public int money = 22222;

    public void show() {
        System.out.println("money: " + money);
        System.out.println("this.money: " + this.money);
        System.out.println("super.money: " + super.money);
    }
}

class Main {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.show();

        /*
            output:
                money: 22222
                this.money: 22222
                super.money: 10000
         */
    }
}

上面代碼的內(nèi)存布局:

二、更復(fù)雜的繼承的內(nèi)存布局

看下面的代碼,話它的內(nèi)存布局圖:

public class Test {
    public static void main(String[] args) {
        Son son = new Son();
    }
}

class Grandfather {
    String name = "Grandfather_name";
    String hobby = "Grandfather_hobby";
}

class Father extends Grandfather {
    String name = "Father_name";
    int money = 66666;
}

class Son extends Father {
    String name = "Son_name";
}

  •  ① 加載類信息: 會(huì)先加載當(dāng)前類的父類的類信息(包括 Object 基類)
  •  ② Son 對(duì)象中會(huì)擁有其所有父類的屬性: 父類屬性和子類屬性名字一樣是可以的
  •  ③ 訪問(wèn)屬性的時(shí)候:先看當(dāng)前類中是否有該屬性?若有,直接訪問(wèn);

? 若沒(méi)有,查看直接父類是否有該屬性,并且該屬性是否可訪問(wèn)?若有并且屬性沒(méi)有被 private 修飾,可訪問(wèn)直接父類的屬性;

? 若有但屬性被 private 修飾,直接報(bào)錯(cuò);

? 若沒(méi)有,繼續(xù)查找父類的父類是否有該屬性,并且是否可訪問(wèn) …【① 看自己有沒(méi)有,有就直接用;若自己沒(méi)有,就看父親有沒(méi)有,若父親沒(méi)有,就看爺爺有沒(méi)有,… 一直向上找,直達(dá)找到 Object;② 若中途發(fā)現(xiàn)有一關(guān)系有該屬性,但是不能被訪問(wèn)(被 private 修飾),直接報(bào)錯(cuò),不繼續(xù)往下找了】

  • 1.父類的屬性被 private 修飾,無(wú)法訪問(wèn),但可通過(guò)其他方式訪問(wèn)(如:父類提供被 public 修飾的 get 方法)
  • 2.私有的屬性在內(nèi)存中依然存在,只是無(wú)法被訪問(wèn)而已

到此這篇關(guān)于Java圖文分析之繼承內(nèi)存布局的文章就介紹到這了,更多相關(guān)Java繼承內(nèi)存布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計(jì)模式之橋接模式詳解

    Java設(shè)計(jì)模式之橋接模式詳解

    橋接模式(Bridge Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,用于將抽象部分和實(shí)現(xiàn)部分`分離開(kāi)來(lái),從而使它們可以獨(dú)立地進(jìn)行變化,本節(jié)給大家講一下設(shè)計(jì)模式中的橋接模式,并結(jié)合實(shí)際業(yè)務(wù)場(chǎng)景給大家講解如何使用,需要的朋友可以參考下
    2023-07-07
  • Java 中比較對(duì)象的用法小結(jié)

    Java 中比較對(duì)象的用法小結(jié)

    在 Java 中,比較對(duì)象的方法有多種多樣,每種都有其適用的場(chǎng)景,通過(guò)深入理解 equals() 方法、Comparable 接口和 Comparator 接口,我們能夠更好地處理對(duì)象之間的比較,使代碼更加靈活、清晰和健壯,本文給大家介紹Java 中比較對(duì)象的用法,感興趣的朋友一起看看吧
    2023-12-12
  • HashMap實(shí)現(xiàn)保存兩個(gè)key相同的數(shù)據(jù)

    HashMap實(shí)現(xiàn)保存兩個(gè)key相同的數(shù)據(jù)

    這篇文章主要介紹了HashMap實(shí)現(xiàn)保存兩個(gè)key相同的數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Springboot跨域處理的多種方式小結(jié)

    Springboot跨域處理的多種方式小結(jié)

    當(dāng)一臺(tái)服務(wù)器資源從另一臺(tái)服務(wù)器(不同 的域名或者端口)請(qǐng)求一個(gè)資源或者接口,就會(huì)發(fā)起一個(gè)跨域 HTTP 請(qǐng)求,這篇文章主要介紹了Springboot跨域處理的多種方式小結(jié),需要的朋友可以參考下
    2023-11-11
  • 利用Java制作字符動(dòng)畫實(shí)例代碼

    利用Java制作字符動(dòng)畫實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于如何利用Java制作字符動(dòng)畫的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò))

    Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò))

    這篇文章主要介紹了Mybatis的collection三層嵌套查詢方式(驗(yàn)證通過(guò)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 深入了解Spring Boot2.3.0及以上版本的Liveness和Readiness功能

    深入了解Spring Boot2.3.0及以上版本的Liveness和Readiness功能

    這篇文章主要介紹了Spring Boot2.3.0及以上版本的Liveness和Readiness功能示例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Java三個(gè)類加載器及它們的相互關(guān)系

    Java三個(gè)類加載器及它們的相互關(guān)系

    Java在需要使用類別的時(shí)候,才會(huì)將類別加載,Java的類別載入是由類別載入器(Class loader)來(lái)達(dá)到的,預(yù)設(shè)上,在程序啟動(dòng)之后,主要會(huì)有三個(gè)類別加載器,文中詳細(xì)介紹了這三個(gè)類加載器,需要的朋友可以參考下
    2021-06-06
  • 單點(diǎn)登錄的三種方式和JWT的介紹與使用

    單點(diǎn)登錄的三種方式和JWT的介紹與使用

    這篇文章主要說(shuō)明了單點(diǎn)登錄的三種方式和JWT的介紹與使用,加深自己的印象以及幫助的諸位小伙伴兒們,需要的朋友可以參考下
    2023-03-03
  • Java的ConcurrentHashMap原理深入分析

    Java的ConcurrentHashMap原理深入分析

    這篇文章主要介紹了Java的ConcurrentHashMap原理深入分析,集合是編程中最常用的數(shù)據(jù)結(jié)構(gòu),而談到并發(fā),幾乎總是離不開(kāi)集合這類高級(jí)數(shù)據(jù)結(jié)構(gòu)的支持,需要的朋友可以參考下
    2023-07-07

最新評(píng)論