1. 程式人生 > >子類構造器呼叫父類構造器的順序問題

子類構造器呼叫父類構造器的順序問題

一 super呼叫父類構造器

  • 子類構造器總會呼叫父類構造器。
  • 如果子類構造器沒有顯示使用super呼叫父類構造器,子類構造器預設會呼叫父類無參構造器。
  • 建立一個子類例項時,總會呼叫最頂層父類構造器。

二 構造器呼叫順序示例

1 程式碼示例

class Creature
{
	public Creature()
	{
		System.out.println("Creature無引數的構造器");
	}
}
class Animal extends Creature
{
	public Animal(String name)
	{
		System.out.println("Animal帶一個引數的構造器,"
			+ "該動物的name為" + name);
	}
	public Animal(String name , int age)
	{
		// 使用this呼叫同一個過載的構造器
		this(name);
		System.out.println("Animal帶兩個引數的構造器,"
			+ "其age為" + age);
	}
}
public class Wolf extends Animal
{
	public Wolf()
	{
		// 顯式呼叫父類有兩個引數的構造器
		super("大灰狼", 3);
		System.out.println("Wolf無引數的構造器");
	}
	public static void main(String[] args)
	{
		new Wolf();
	}
}

2 執行結果

Creature無引數的構造器

Animal帶一個引數的構造器,該動物的name為大灰狼

Animal帶兩個引數的構造器,其age為3

Wolf無引數的構造器

3 結果分析

從執行結果來看,建立任何物件總是從該類所在繼承樹最頂層的構造器開始執行,然後依次向下執行,最後才執行本類的構造器,如果其個父類通過this呼叫同類中的構造器,就會依次執行父類的多個構造器。

相關推薦

構造呼叫構造順序問題

一 super呼叫父類構造器 子類構造器總會呼叫父類構造器。 如果子類構造器沒有顯示使用super呼叫父類構造器,子類構造器預設會呼叫父類無參構造器。 建立一個子類例項時,總會呼叫最頂層父類構造器。 二 構造器呼叫順序示例 1 程式碼示例 class Creature { public Creature(

構造方法呼叫構造方法(super關鍵字的使用)

package kaoshi; /** ************************************ * @author Hejing * @date 2017年12月24日 * @class fisrt.java * ***********

繼承和呼叫構造方法

1. 如果子類沒有定義構造方法,則呼叫父類的無引數的構造方法,. 2. 如果子類定義了構造方法,不論是無引數還是帶引數,在建立子類的物件的時候,首先執行父類無引數的構造方法,然後執行自己的構造方法。 3. 如果子類呼叫父類帶引數的構造方法,可以通過super(引數)呼叫所需

繼承,重寫方法,運用多型時呼叫重寫的方法時呼叫的還是呼叫的?

package 第五天; public class Person { public void say() { System.out.println("我是Person的say方法"); } } 子類Student如下: package 第五天; publ

python3 繼承 在中如何呼叫中的方法

繼承 兩種在子類呼叫父類函式的方法: 一、使用未繫結子類的父類的方法,要傳入子類的物件,即self A.func(self) 二、使用super()呼叫 super().func()

重寫方法,重寫方法與呼叫方法

class Animal: def eat(self): print("-----吃-----") def drink(self): print("-----喝-----") class Dog(Animal): def bark(self): print("-----汪汪

python中子例項化呼叫方法

面向物件的核心為物件,物件是由類例項化而來的,那麼類與類之間存在一個繼承的關係,被繼承的類叫做父類,繼承了父類的類為子類。 子類繼承了父類,那麼子類例項化的物件就可以呼叫所有父類的方法,當然也可以呼叫子類自身所有的方法。因為這些方法都屬於該物件的方法。 比如,子類child

在C++中子繼承和呼叫的建構函式方法

構造方法用來初始化類的物件,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類物件時,為了初始化從父類繼承來的資料成員,系統需要呼叫其父類的構造方法。 如果沒有顯式的建構函式

Java為什麼在例項化的物件時,會先呼叫構造

1、為什麼在例項化子類的物件時,會先呼叫父類的構造器? 答:子類繼承父類後,獲取到父類的屬性和方法,這些屬性和方法在使用前必須先初始化,所以須先呼叫父類的構造器進行初始化 2、在哪裡呼叫父類的構造器? 答:在子類構造器的第一行會隱式的呼叫 super();,即呼叫父

繼承:在構造方法中呼叫構造方法

  abstract class Pet { private String name; private String sex; public Pet(String name,String sex) { this.nam

Super關鍵字和呼叫構造

一、子類不會獲得父類的構造器,但子類構造器裡可以呼叫父類構造器初始化程式碼。 1.1 在一個構造器中呼叫另一個過載的構造器,使用this呼叫來完成。如下程式碼段: public class C

PHP面向物件開發,關於呼叫構造的問題

今天進行PHP開發時,發現子類的構造方法的引數必須與父類的構造方法引數一樣,否則會在網頁上進行警告,影響網頁的美觀。 目前的解決方法有三個: 1.通過調整PHP的錯誤提示等級。 2.使用父類的建構函式,子類的屬性單獨賦值。 3.解決方法如下: class a{ var $

Java呼叫構造方法

在Java中,子類的構造過程中,必須呼叫其父類的建構函式,是因為有繼承關係存在時,子類要把父類的內容繼承下來,通過什麼手段做到的?        答案如下:         當你new一個子類物件的時候,必須首先要new一個父類的對像出來,這個父類物件位於子類物件的內

Java構造 繼承問題(是否必須實現的有參建構函式)

首先,答案是否定的,但是 如果你在父類中寫了一個有參建構函式,但是沒有宣告無參建構函式,就有問題。 (這裡補充一下,我們都知道,當我們不寫有參建構函式的時候,系統會自動生成一個無參建構函式,而且每個類的建立都依賴建構函式,子類的建構函式依賴父類的建構函式,這牽扯到一個隱式傳

自定義異常就是給出構造即可

package cn.my.service; /**  * 自定義異常類就是給出父類的構造器即可,方便來建立物件!  * @author Administrator  *  */ public class UserException extends Exc

Java裡子呼叫構造方法問題

 在Java中,子類的構造過程中,必須呼叫其父類的建構函式,是因為有繼承關係存在時,子類要把父類的內容繼承下來,通過什麼手段做到的?        答案如下:         當你new一個子類物件的時候,必須首

python中子呼叫構造方法

python和其他面嚮物件語言類似,每個類可以擁有一個或者多個父類,它們從父類那裡繼承了屬性和方法。如果一個方法在子類的例項中被呼叫,或者一個屬性在子類的例項中被訪問,但是該方法或屬性在子類中並不存在,那麼就會自動的去其父類中進行查詢。 繼承父類後,就能呼叫父類方法和訪

java建立一個子物件是會呼叫構造方法會不會建立

第三個部分就是java原始碼中的構造方法中的程式碼,java原始碼中有幾個構造方法,那麼class檔案中就有幾個初始化方法,編譯器會把第一部分與第二部分分別複製到每個初始化方法的前端,然後把初始化方法對應引數的構造方法的程式碼複製到相應初始化方法中(這裡說的複製其實應該說是編譯,不過為了讓你更好理解所以如此說

第五章 的繼承和super的使用呼叫構造方法

類的繼承 mammals dogs cats humans lions tigers leopards 人是哺乳動物,因為人都具有哺乳動物的所有特徵,但哺乳動物卻不一定是人。哺乳動物類和人類之間就存在繼承關係(IS-A

JNI/NDK開發指南(七)---呼叫構造方法和例項方法

我們先回過一下,在Java中例項化一個物件和呼叫父類例項方法的流程。先看一段程式碼: package com.study.jnilearn; public class Animal { public void run() { System.out.p