關(guān)于java中構(gòu)造函數(shù)的一些知識(shí)詳解
java的構(gòu)造函數(shù)是一個(gè)非常重要的作用,首先java里的構(gòu)造函數(shù)是可以重載的,而且因?yàn)橐彩强梢岳^承在父類(lèi)的構(gòu)造函數(shù),所以在子類(lèi)里,首先必然是調(diào)用父類(lèi)的構(gòu)造函數(shù)??梢钥聪旅娴膬蓚€(gè)例子來(lái)對(duì)比:
public class Test { public static void main(String args[]) { B b = new B(100); } } class A { public A() { System.out.println("A without any parameter"); } public A(int i) { System.out.println("A with a parameter"); } } class B extends A { public B() { System.out.println("B without any parameter"); } public B(int i) { System.out.println("B with a parameter"); } }
這個(gè)例子最后輸出的是
A without any parameter
B with a parameter
可以看到首先調(diào)用的是父類(lèi)的構(gòu)造函數(shù),然后再是調(diào)用自己的構(gòu)造函數(shù)。但是因?yàn)檫@里的B類(lèi)中的有參數(shù)的構(gòu)造函數(shù)是沒(méi)有super父類(lèi),所以導(dǎo)致它只會(huì)執(zhí)行父類(lèi)的沒(méi)有參數(shù)的構(gòu)造函數(shù)。如果要讓它執(zhí)行有參數(shù)的父類(lèi)的構(gòu)造函數(shù),那么就要這樣寫(xiě)代碼:
public class Test { public static void main(String args[]) { B b = new B(100); } } class A { public A() { System.out.println("A without any parameter"); } public A(int i) { System.out.println("A with a parameter"); } } class B extends A { public B() { System.out.println("B without any parameter"); } public B(int i) { super(i); //這里就是繼承自父類(lèi)的有參數(shù)的構(gòu)造函數(shù) System.out.println("B with a parameter"); } }
所以最后輸出的是:
A with a parameter
B with a parameter
因此,派生類(lèi)必須通過(guò)super來(lái)調(diào)用父類(lèi)的含有參數(shù)的構(gòu)造函數(shù)。以下再附一道題:
public class Test extends X { Y y = new Y(); Test() { System.out.print("Z"); } public static void main(String args[]) { new Test(); } } class X { Y b = new Y(); X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } }
輸出的結(jié)果是什么?
首先我們來(lái)分析這道題:
因?yàn)槭紫瓤催@個(gè)main函數(shù),這個(gè)main函數(shù)只有一句代碼: new Test();因?yàn)榘l(fā)現(xiàn)這個(gè)Test類(lèi)是繼承自X,所以首先要構(gòu)造X,那么就進(jìn)行X類(lèi)的運(yùn)行 Y b = new Y(),然后我們可以看到輸出的Y,然后就是執(zhí)行X類(lèi)的構(gòu)造函數(shù),輸出X;接著就是構(gòu)造Y,然后執(zhí)行Test自己的構(gòu)造函數(shù),輸出Z,所以輸出結(jié)果是YXYZ。
以上這篇關(guān)于java中構(gòu)造函數(shù)的一些知識(shí)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java 無(wú)參數(shù)構(gòu)造函數(shù)的應(yīng)用
- java構(gòu)造函數(shù)示例(構(gòu)造方法)
- Java構(gòu)造函數(shù)的相互調(diào)用代碼示例
- Java 重載、重寫(xiě)、構(gòu)造函數(shù)的實(shí)例詳解
- java枚舉類(lèi)的構(gòu)造函數(shù)實(shí)例詳解
- Java構(gòu)造函數(shù)與普通函數(shù)用法詳解
- 深入理解Java中的構(gòu)造函數(shù)引用和方法引用
- 不同Java泛型構(gòu)造函數(shù)的詳解
- Java序列化中子類(lèi)、父類(lèi)構(gòu)造函數(shù)問(wèn)題實(shí)例分析
- Java的無(wú)參構(gòu)造函數(shù)用法實(shí)例分析
相關(guān)文章
SpringSecurity安全框架在SpringBoot框架中的使用詳解
在Spring?Boot框架中,Spring?Security是一個(gè)非常重要的組件,它可以幫助我們實(shí)現(xiàn)應(yīng)用程序的安全性,本文將詳細(xì)介紹Spring?Security在Spring?Boot框架中的使用,包括如何配置Spring?Security、如何實(shí)現(xiàn)身份驗(yàn)證和授權(quán)、如何防止攻擊等2023-06-06java文件對(duì)話框過(guò)濾特定文件類(lèi)型示例
文件作為存儲(chǔ)數(shù)據(jù)的單元,會(huì)根據(jù)數(shù)據(jù)類(lèi)型產(chǎn)生很多分類(lèi),也就是所謂的文件類(lèi)型。在對(duì)數(shù)據(jù)文件進(jìn)行操作時(shí),常常需要根據(jù)不同的文件類(lèi)型來(lái)作不同的處理。本實(shí)例實(shí)現(xiàn)的是讀取文件夾指定類(lèi)型的文件并顯示到表格控件中2014-02-02Spring?Boot中使用Swagger3.0.0版本構(gòu)建RESTful?APIs的方法
Swagger?是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化?RESTful?風(fēng)格的?Web?服務(wù),這篇文章主要介紹了Spring?Boot中使用Swagger3.0.0版本構(gòu)建RESTful?APIs的方法,需要的朋友可以參考下2022-11-11SpringBoot利用限速器RateLimiter實(shí)現(xiàn)單機(jī)限流的示例代碼
本文主要介紹了SpringBoot利用限速器RateLimiter實(shí)現(xiàn)單機(jī)限流的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01java 中序列化與readResolve()方法的實(shí)例詳解
這篇文章主要介紹了java 中序列化與readResolve()方法的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家理解這部分知識(shí),需要的朋友可以參考下2017-08-08【spring-boot】快速構(gòu)建spring-boot微框架的方法
本篇文章主要介紹了【spring-boot】快速構(gòu)建spring-boot微框架的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Java數(shù)據(jù)類(lèi)型的規(guī)則
這篇文章主要介紹了Java數(shù)據(jù)類(lèi)型的規(guī)則的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12