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

Java圖文分析之繼承內存布局

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

一、初步了解繼承的內存布局

(1) 繼承內存布局初探

看下面擁有繼承關系的代碼,并畫出內存布局圖:

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();
    }
}

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

繼承的內存布局圖:

  •  Student 類繼承 Person 類后會擁有 Person 類中的 age 屬性,age 屬性在 Student 對象的內存中也擁有一份
  • Student 對象的內存和 Person 對象的內存各種獨占,互不干擾

(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 類位于類繼承體系數的頂端。每一個類都是 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
         */
    }
}

上面代碼的內存布局:

二、更復雜的繼承的內存布局

看下面的代碼,話它的內存布局圖:

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";
}

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

? 若沒有,查看直接父類是否有該屬性,并且該屬性是否可訪問?若有并且屬性沒有被 private 修飾,可訪問直接父類的屬性;

? 若有但屬性被 private 修飾,直接報錯

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

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

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

相關文章

最新評論

都江堰市| 黄平县| 洛宁县| 兴隆县| 麦盖提县| 叶城县| 甘谷县| 内黄县| 宁陵县| 石城县| 石柱| 龙海市| 类乌齐县| 剑河县| 东乌| 深水埗区| 龙南县| 华亭县| 朝阳区| 阜南县| 贵定县| 西和县| 吉木萨尔县| 元氏县| 洞口县| 全州县| 广平县| 怀仁县| 永济市| 左权县| 东光县| 玉龙| 五台县| 二手房| 莱西市| 高雄县| 岚皋县| 宾川县| 禄丰县| 台山市| 蓬莱市|