1. 程式人生 > >面向物件繼承中記憶體載入原理

面向物件繼承中記憶體載入原理


 開始JVM裡面會有兩個類 一個是 zi.class ,和Fu.class 
  1.執行到zi的建構函式的時候。會在第一樣執行super()呼叫父類建構函式。那麼我們就載入父類的程式碼塊。
 2.現有類我們才能建立new物件, 這樣才會在堆裡面開闢一塊空間。
 3.當我們new一個物件的時候。我們就呼叫子類的建構函式讓進棧。 接著第一行的super()呼叫父類的建構函式。
 4.父類也進棧了。但是在堆裡面沒有開闢記憶體空間,父類指向的是new的子類物件。
 5.所以我們呼叫的是子類的方法。

 
package com.review;
public class BookPC
{
	public static void main(String[] args)
	{
		/*
		 * 思路:
		 */
		Zi zi = new Zi();
		System.out.println("你怎麼看");
		zi.show();
		/**
		 * 開始JVM裡面會有兩個類 一個是 zi.class ,和Fu.class 
		 * 1.執行到zi的建構函式的時候。會在第一樣執行super()呼叫父類建構函式。那麼我們就載入父類的程式碼塊。
		 * 2.現有類我們才能建立new物件, 這樣才會在堆裡面開闢一塊空間。
		 * 3.當我們new一個物件的時候。我們就呼叫子類的建構函式讓進棧。 接著第一行的super()呼叫父類的建構函式。
		 * 4.父類也進棧了。但是在堆裡面沒有開闢記憶體空間,父類指向的是new的子類物件。
		 * 5.所以我們呼叫的是子類的方法。
		 */
	}
}

class Fu
{

	Fu()
	{
		show();
	}
	public void show()
	{
		System.out.println("Fu show");
	}
	
}
class Zi extends Fu
{
	int num =8 ;
	Zi()
	{
		super(); //這行程式碼即使我們沒有寫,也會預設存在的
		this.num =9;
	}
	Zi(int i)
	{
	    
	}
	public void show()
	{
		System.out.println("zi shwo"+num);
	}
}



執行結果:

zi shwo0
你怎麼看
zi shwo9

相關推薦

面向物件繼承記憶體載入原理

 開始JVM裡面會有兩個類 一個是 zi.class ,和Fu.class    1.執行到zi的建構函式的時候。會在第一樣執行super()呼叫父類建構函式。那麼我們就載入父類的程式碼塊。  2.現

Python3面向物件------繼承

     以下是我對Python3面向物件------繼承的理解,因為博主也是初學Python3,有很多東西都還停留在表層的理解,如果我的部落格有任何錯誤,請及時評論或者私信我,我會及時更改。也歡迎同樣學習Python的你願意關注我的部落格,我會把我每週的學習內容進行整

面向物件-繼承實現的原理

繼承的實現原理:1、子類會先於父類2、多個父類,會根據列表中的順序被檢查3、如果對於下一個類存在兩個合法的選擇,選擇第一個父類。繼承順序(mro查詢順序) 1、新式類:廣度優先2、經典類:深度優先(一條道走到底) 在Python2中 經典類:沒有繼承object,以及它的子類都稱之為經典類 在Pytho

java面向物件——繼承最終章--子類的例項化過程(記憶體)

一個物件的例項化過程:Person p=new Person(); 1.jvm會讀取指定的路徑下的Person.class檔案,並載入進記憶體。    並會先載入Person中的父類(如果有父類物件的情況下)。 2.在堆記憶體中開闢空間,分配地址 3.並在物件空間中,對物件

面向物件程式設計繼承概念的再理解

繼承是面向物件程式設計的基本概念之一,是面向物件程式設計最很重要的特徵。 先來看一下繼承的定義:一個新類從已有的類中獲得其已有特性,這種現象稱為類的繼承。可見繼承是解決程式碼中的複用問題。 在寫程式碼的時候一般會有一個誤區,認為是子類繼承於父類,其實這是有問題的。先來看一下

面向物件——繼承和多型

面向物件——繼承和多型 一. 繼承 1.繼承: 是一種機制,可以進行程式碼的重用——基類(超類) 子類(派生類)   子類繼承了 父類的除建構函式外的所有屬性 2.super關鍵字: super():----->呼叫基類的建構函式 //必

Python面向物件(繼承)

面向物件三大特性:繼承 1 class F: 2 def f1(self): 3 print("F.f1") 4 5 def f2(self): 6 print("F.f2") 7 8 class S(F):#子類繼承父類 9

Java面向物件----繼承概念,super關鍵字

繼承概念:   繼承需要符合的關係  is-a  , 父類通用更抽象,子類更特殊更具體 類之間的關係 繼承體現 組合體現 實現介面體現 繼承的意義    程式碼重用   體現不同抽象層次 extends關鍵字 Super關鍵字

Golang 之 面向物件繼承(四)

並沒有為PhonePlus 實現介面,僅僅為Phone實現了介面,不過PhonePlus裡面嵌入了Phone的一個內部型別,也是可以通過介面呼叫函式Call來呼叫到Communicate method。 在main函式,發現PhonePlus的methods set 裡

Golang 之 面向物件繼承(三)

對於結構體來說,一個是 Phone型別,實現了PhoneFunction介面,這種情況下,無論是Phone還是*Phone都是可以成為介面呼叫的 package main import "fmt" type Phone struct { OS string

Golang 之 面向物件繼承(二)

對於結構體來說,一個是 Phone型別,一個是Phone的指標型別,他們都有Call方法,這種情況下,方法也是繼承 package main import "fmt" type Phone struct { OS string Net string

Golang 之 面向物件繼承(一)

對於結構體來說,Go中使用一種叫做”組合”的方法來實現繼承 package main type Phone struct { } func (p *Phone) Call() { println("...呼叫中") } // 組合 type Mi8 str

PHP面向物件OOP的魔術方法

一、什麼是魔術方法: PHP為我們提供了一系列用__開頭的函式,這些函式無需自己手動呼叫,會在合適的時機自動呼叫,這類函式稱為魔術函式。 例如: function __construct(){} 在new一個新物件時自動呼叫此函式 二、PHP中都有那些魔術方法,以及它們的作用:

JavaSE之面向物件

1.static靜態修飾符 使用static修飾的成員變數、常量、方法和程式碼塊統稱為靜態成員。 靜態成員歸整個類所有,但不依賴於類的例項,只是別所有的例項所共享,只要這個類被JVM載入,就可以根據類名在全域性資料區域中找到他們,因此,靜態成員可以在任何例項物件建立之前訪問。 1.1st

day30 Pyhton 面向物件 繼承.裝飾器

一面向物件相關 談談你對面向物件的理解   1.泛泛談:什麼情況下使用面向物件   2.針對面向物件的 封裝 繼承 多型一個一個的談   3.根據你工作中的實際情況對應來舉例子 封裝 1.廣義上:普遍的大家認為的封裝,就是把一類相同屬性和方法的事務抽象為一個類   把屬性和方法封裝在一個類中

PHP學習——24 PHP面向物件(類靜態成員的建立與訪問技巧:static)

<?php class Employee { // 訪問控制符:指示類成員在哪裡可以被訪問:public/protected/private // 成員狀態符:指示如何訪問該成員:靜態self/parent/static,非靜態:$this-> public static $

JAVA學習——基礎部分——面向物件——繼承

一、概念(自我理解) 將一堆子類進行總結,將都有的相同點抽象成父類,由父類形成大體,然後子類豐富父類。 繼承類不可以多繼承,JAVA是單繼承類。 父類還可以往上加分別是:子類——父類——父類的父類——·········——最高時抽象類 可以用這句話判斷:“A is a B”若是這個成

面向物件-類的三個裝飾器

為了程式碼更加完善,引入幾個裝飾器.. 裝飾類中的方法 @classmethod    --->裝飾類方法,不用self屬性,只用類的cls屬性 @staticmethod    --->裝飾靜態方法,既不用self屬性,又不用類cls的

python——面向物件

1.單繼承       在程式中,繼承描述的是事物之間的所屬關係,例如貓和狗都屬於動物, 程式中便可以描述為貓和狗繼承自動物。  同理,波斯貓和巴釐貓都繼承自貓,而沙皮狗和斑點狗都繼承自狗       &

面向物件方法的資料庫設計

   在面向物件中,是沒有資料流這一說法的。業務的完成是由物件及訊息來完成的,只有“物件流”,沒有資料流。         只是在現實中,絕大部分的物件持久化是用關係資料庫實現的,我麼還沒有在效能上和查詢上