Java繼承關係的理解

2021-09-20 06:31:14 字數 2030 閱讀 7936

首先有乙個基類 thing

public

class

thing

}

然後有個子類命名為shape(形狀)繼承thing

public

class

shape

extends

thing

public

void

getname()

public

static

void

getsname()

}

然後有個子類命名為circle(圓)繼承shape

public

class

circle

extends

shape

@override

public

void

getname()

public

void

getsupername()

public

static

void

getsname()

}

然後有乙個測試類:

public

class

test

}

讀者可以先自己思考一下結果會是什麼。

everything begins here!

here is constructor of shape!

this is constructor of circle!

shape

this is getname of circle!

here is static getname of shape

here is static getname of circle

everything begins here!

here is constructor of shape!

this is constructor of circle!

shape

circle

下面一步一步的解析結果

第一句語句shape shape = new circle();

得到的結果是:

everything begins here!

here is constructor of shape!

this is constructor of circle!

shape是放在棧中的位址,只是帶了個偏移量。

new circle();會在堆中新建乙個物件。新建乙個物件的時候,會先新建父類的物件,如果父類的物件有父類就先新建父類的結構以此類推。

system.out.println(shape.name);得到的結果是shape

這是因為在記憶體堆中新建的物件類似乙個疊起來的塔。而宣告shape的棧位址會指到帶了這個偏移量的circle父類shape。所以宣告了shape可以使用shape中的一切有的方法。

shape.getname();得到結果是子類的方法,結果是shape。子類的方法可以覆蓋父類的方法。如下:

靜態區存了靜態方法和靜態變數,所以每個類都有自己的靜態方法和靜態類。訪問的時候直接是訪問靜態區,所以靜態方法的呼叫方式為:shape.getsname();

所以結果是here is static getname of shape

而其它的呼叫結果原理同上,結果很容易得出。

JAVA的繼承關係

今天學習到繼承的概念 1.子類和父類關係,關鍵字 extends implements 子類可以繼承父類的所有非私有屬性和行為,繼承是單繼承,不能同時繼承多個父類。比如 兒子可以繼承父親的事業,但不包括private類關係的一部分的型別,並且只有乙個父類 2.繼承 繼承是一種聯結類的層次模型,並且允...

java集合繼承關係

物件導向語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,就對物件進行儲存,集合就是儲存物件最常用的一種方式。陣列雖然也可以儲存物件,但長度是固定的 集合長度是可變的,陣列中可以儲存基本資料型別,集合只能儲存物件。集合類的特點 集合只用於儲存物件,集合長度是可變的,集合可以儲存不同型別...

Java繼承關係是否合理的判別

當乙個類繼承自另乙個類時,我們會說這個子類去繼承父類。若想知道某物是否應該要繼承另一物時,可以用is a 是乙個 測試檢驗。例子 三角形是乙個多邊形.ok 外科醫生是乙個醫生.ok 澡盆是乙個浴室.no 浴室與澡盆確實有關聯,但不是繼承上的關係。浴室與澡盆發生的是has a 有乙個 的關係。浴室有乙...