關于java中構造函數的一些知識詳解
java的構造函數是一個非常重要的作用,首先java里的構造函數是可以重載的,而且因為也是可以繼承在父類的構造函數,所以在子類里,首先必然是調用父類的構造函數??梢钥聪旅娴膬蓚€例子來對比:
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"); } }
這個例子最后輸出的是
A without any parameter
B with a parameter
可以看到首先調用的是父類的構造函數,然后再是調用自己的構造函數。但是因為這里的B類中的有參數的構造函數是沒有super父類,所以導致它只會執(zhí)行父類的沒有參數的構造函數。如果要讓它執(zhí)行有參數的父類的構造函數,那么就要這樣寫代碼:
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); //這里就是繼承自父類的有參數的構造函數 System.out.println("B with a parameter"); } }
所以最后輸出的是:
A with a parameter
B with a parameter
因此,派生類必須通過super來調用父類的含有參數的構造函數。以下再附一道題:
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"); } }
輸出的結果是什么?
首先我們來分析這道題:
因為首先看這個main函數,這個main函數只有一句代碼: new Test();因為發(fā)現這個Test類是繼承自X,所以首先要構造X,那么就進行X類的運行 Y b = new Y(),然后我們可以看到輸出的Y,然后就是執(zhí)行X類的構造函數,輸出X;接著就是構造Y,然后執(zhí)行Test自己的構造函數,輸出Z,所以輸出結果是YXYZ。
以上這篇關于java中構造函數的一些知識詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringSecurity安全框架在SpringBoot框架中的使用詳解
在Spring?Boot框架中,Spring?Security是一個非常重要的組件,它可以幫助我們實現應用程序的安全性,本文將詳細介紹Spring?Security在Spring?Boot框架中的使用,包括如何配置Spring?Security、如何實現身份驗證和授權、如何防止攻擊等2023-06-06Spring?Boot中使用Swagger3.0.0版本構建RESTful?APIs的方法
Swagger?是一個規(guī)范和完整的框架,用于生成、描述、調用和可視化?RESTful?風格的?Web?服務,這篇文章主要介紹了Spring?Boot中使用Swagger3.0.0版本構建RESTful?APIs的方法,需要的朋友可以參考下2022-11-11SpringBoot利用限速器RateLimiter實現單機限流的示例代碼
本文主要介紹了SpringBoot利用限速器RateLimiter實現單機限流的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01java 中序列化與readResolve()方法的實例詳解
這篇文章主要介紹了java 中序列化與readResolve()方法的實例詳解的相關資料,這里提供實例幫助大家理解這部分知識,需要的朋友可以參考下2017-08-08【spring-boot】快速構建spring-boot微框架的方法
本篇文章主要介紹了【spring-boot】快速構建spring-boot微框架的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12