首先有乙個基類 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 有乙個 的關係。浴室有乙...