如何理解Java中基類子對(duì)象的構(gòu)建過(guò)程從"基類向外"進(jìn)行擴(kuò)散的?
《Java編程思想》復(fù)用類一章,提出基類的子對(duì)象的構(gòu)建過(guò)程是從基類“向外”進(jìn)行擴(kuò)散的。
下面通過(guò)實(shí)例進(jìn)行講解,首先看下面的代碼:
import static net.mindview.util.Print.*; //《java編程思想》提供的類庫(kù)
/**
* @author Administrator
*
*/
public class Cat extends Animal {
public Cat() {
// TODO Auto-generated constructor stub
print("Caretoon constructor");
}
public static void main(String[] args) {
Cat x = new Cat();
}
}
class Biology {
Biology() {
// TODO Auto-generated constructor stub
print("Art constructor");
}
}
class Animal extends Biology {
Animal() {
// TODO Auto-generated constructor stub
print("Drawing constructor");
}
}
程序運(yùn)行結(jié)果:

在這里共聲明了三個(gè)類,分別是Biology, Animal,Cat. 繼承關(guān)系如下:

在main()函數(shù)中,經(jīng)過(guò)單步調(diào)試可以看到,創(chuàng)建Cat類型對(duì)象時(shí)候,首先需要找到Cat類的父類對(duì)象,即從Cat類尋找其父類Animal類的構(gòu)造器,最后尋找Animal的父類Biology類的構(gòu)造器。
找到Biology基類之后,按照下面順序,執(zhí)行各自的構(gòu)造函數(shù)

所以,最終的輸出結(jié)果,如控制臺(tái)輸出所示。
需要注意的是,即使Cat類不創(chuàng)建構(gòu)造器,編譯器會(huì)創(chuàng)建默認(rèn)的構(gòu)造器。仍然會(huì)調(diào)用到基類的構(gòu)造器。輸出結(jié)果如下:

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Spring的自定義擴(kuò)展標(biāo)簽NamespaceHandler解析
這篇文章主要介紹了Spring的自定義擴(kuò)展標(biāo)簽NamespaceHandler解析,在很多情況下,我們需要為系統(tǒng)提供可配置化支持,簡(jiǎn)單的做法可以直接基于Spring的標(biāo)準(zhǔn)Bean來(lái)配置,Spring提供了可擴(kuò)展Schema的支持,這是一個(gè)不錯(cuò)的折中方案,需要的朋友可以參考下2023-12-12
在?Spring?Boot?中使用?Quartz?調(diào)度作業(yè)的示例詳解
這篇文章主要介紹了在?Spring?Boot?中使用?Quartz?調(diào)度作業(yè)的示例詳解,在本文中,我們將看看如何使用Quartz框架來(lái)調(diào)度任務(wù),Quartz支持在特定時(shí)間運(yùn)行作業(yè)、重復(fù)作業(yè)執(zhí)行、將作業(yè)存儲(chǔ)在數(shù)據(jù)庫(kù)中以及Spring集成,需要的朋友可以參考下2022-07-07
Java在Map轉(zhuǎn)Json字符串時(shí)出現(xiàn)"\"轉(zhuǎn)義字符的解決辦法
當(dāng)一個(gè)Map被轉(zhuǎn)成Json字符串后,被添加到另一個(gè)Map中,會(huì)出現(xiàn)被加上“\”轉(zhuǎn)義字符的情況,這個(gè)時(shí)候該如何解決呢,下面就來(lái)和小編一起了解一下2023-07-07
Spring?Boot整合Zookeeper實(shí)現(xiàn)分布式鎖的場(chǎng)景分析
這篇文章主要介紹了Spring?Boot整合Zookeeper實(shí)現(xiàn)分布式鎖,zk實(shí)現(xiàn)分布式鎖完全是依靠zk節(jié)點(diǎn)類型當(dāng)中的臨時(shí)序號(hào)節(jié)點(diǎn)來(lái)實(shí)現(xiàn)的,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
Java中的FutureTask實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Java中的FutureTask手寫代碼實(shí)例,FutureTask是Future的實(shí)現(xiàn),用來(lái)異步任務(wù)的獲取結(jié)果,可以啟動(dòng)和取消異步任務(wù),查詢異步任務(wù)是否計(jì)算結(jié)束以及獲取最終的異步任務(wù)的結(jié)果,需要的朋友可以參考下2023-12-12
spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例
這篇文章主要介紹了spring boot使用WebClient調(diào)用HTTP服務(wù)代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
在SpringBoot中配置MySQL數(shù)據(jù)庫(kù)的詳細(xì)指南
在 Spring Boot 中配置數(shù)據(jù)庫(kù)是一個(gè)相對(duì)簡(jiǎn)單的過(guò)程,通常涉及到以下幾個(gè)步驟:添加數(shù)據(jù)庫(kù)驅(qū)動(dòng)依賴、配置數(shù)據(jù)源屬性、以及可選的配置 JPA(如果使用),下面是小編給大家編寫的一個(gè)詳細(xì)的指南,以MySQL 數(shù)據(jù)庫(kù)為例,需要的朋友可以參考下2024-12-12

