1. 程式人生 > >java中子類繼承父類時是否繼承建構函式呢?

java中子類繼承父類時是否繼承建構函式呢?

java繼承中對建構函式是不繼承的。

以下是例子:

 public class FatherClass {
 public FatherClass() {
       System.out.println(100);
 }

 public FatherClass(int age) {
      System.out.println(age);
 }

}

public class SonClass extends FatherClass{

        public SonClass() {
         }
        public SonClass(int c) {
                 System.out.println(1234);
        }

  
 public static void main(String[] args) {

  FatherClass f = new FatherClass(28);
  SonClass s = new SonClass(66);
 
 }
}

編譯後執行結果如下是什麼呢?

分析:1. FatherClass f = new FatherClass(28);這句沒有必要解釋

2.SonClass s = new SonClass(66);執行這句時,呼叫

 public SonClass(int c) {
                 System.out.println(1234);
        }

在這個建構函式中,等價於

 public SonClass(int c) {

                super();//必須是第1行,否則不能編譯
                 System.out.println(1234);
        }

所以結果是    100
                        
1234

3.如果子類建構函式是這樣寫的

public SonClass(int c) {

                super(22);//必須是第1行,否則不能編譯

               //顯示呼叫了super後,系統就不再呼叫super();
                 System.out.println(1234);
        }

執行結果是   22
                         1234

總結1:建構函式不能繼承,只是呼叫而已。

如果父類沒有無參建構函式

建立子類時,不能編譯,除非在建構函式程式碼體中第一行,必須是第一行顯示呼叫父類有參建構函式

如下:

SonClass (){

super(777);//顯示呼叫父類有參建構函式

System.out.println(66);

}

如果不顯示呼叫父類有參建構函式,系統會預設呼叫父類無參建構函式super();

但是父類中沒有無參建構函式,那它不是不能呼叫了。所以編譯就無法通過了。

總結2:建立有參建構函式後,系統就不再有預設無參建構函式。

如果沒有任何建構函式,系統會預設有一個無參建構函式。

相關推薦

java中子繼承呼叫利用繼承方法呼叫this

package cn.itcast.test1; class Parent{     public Object getObject(){         return this;     } } c

java中子繼承是否繼承建構函式

java繼承中對建構函式是不繼承的。 以下是例子:  public class FatherClass { public FatherClass() {       System.out.println(100); }  public FatherClass(int age)

java中子繼承程式執行順序問題

測試程式碼: package test; public class FatherTest { private String name; public FatherTest(){ System.out.println("--父類的無參建構函式--"); } public

java中子繼承和實現介面有同名方法怎麼處理

Java是一門單繼承語言,但是,在子類的繼承關係中,會存在父類和介面有同名方法的情況,這種情況該怎麼處理呢? 我們來一步步驗證: 1.子類繼承父類,實現介面,父類和介面有同名方法 public int

java中子繼承的構造方法嗎?

宣告:本人剛接觸java不久,如果理解的哪裡有錯誤或偏差,歡迎大家指正(希望大家帶著批判的眼光來看這篇文章)。 java中子類能繼承父類的構造方法嗎?帶著這個疑問我們首先來看個例子: //B類繼承A類 public class B extends A {

Java中子繼承關於構造方法的問題

子類繼承了父類,若父類的構造方法沒有過載那麼,子類的構造方法也不需要通過super呼叫父類構造方法。一個類中如果構造方法重寫了並且帶了引數,那麼這個類的原來系統預設的無參構造方法便消失。由此,若一個父類中只有一個帶引數的構造方法,那麼在寫其子類的構造方法時必須先通過super

Java 中子是否只繼承的非私有變數和方法?

今天在 CSDN 論壇中見到有人問在 Java 中子類是否只繼承父類的非私有變數和方法(原貼在此)。大部分跟貼都認為這句話是正確的,但是對於這個問題背後的本質理解卻是錯誤的。首先我們明確一下“繼承”一詞的概念,在 Java 中,繼承一詞的意義是有限制的。一個子類只能繼承其父類

轉:Java中子是否可以繼承的static變量和方法而呈現多態特性

... test 關系 一個 道理 -c class 靜態 這一 原文地址:Java中子類是否可以繼承父類的static變量和方法而呈現多態特性 靜態方法 通常,在一個類中定義一個方法為static,那就是說,無需本類的對象即可調用此方法,關於static方法,聲明為sta

Java中子能否繼承的私有屬性和方法

Java中子類繼承父類的私有屬性和方法 寫在前面: 已經正式從事java開發一年了,在寫一個demo的時候,突然發現繼承這塊的知識,以前都沒有注意到這些,原來自己掌握的很淺薄。 通過書本看到子類擁有父類的所有屬性和方法,於是寫程式去驗證,發現父類的私有屬性和方法,子類是不能訪問的

java中子能不能繼承構造方法

    結果有些和想象中的不一樣吧。    原因如下:其實每個子類構造方法的第一條語句,都是隱含地呼叫super(),如果父類沒有這種形式的建構函式,那麼在編譯的時候就會報錯。    所以父類中的構造方法是不能繼承的,但是在例項化子類的時候會呼叫父類的構造方法,這樣就能解釋下面這種情況了。面試題目1:指出下面

java中子繼承的屬性說明

先看一段程式碼: 定義父類: 定義子類1: 定義子類2: 測試類: 執行結果為: 可以看出,用父類例項化,子類物件繼承父類物件的屬性值,子類建構函式中不super()也沒用。若想不繼承父類的屬性,直接用子類進行例項化。 這樣的情況建議使用abst

Java中子是否可以繼承的static變數和static方法,以及的private屬性和private方法

轉載自以下原文: 原文連結1 原文連結2 一、子類可以繼承父類的private屬性和private方法: 1、子類繼承父類,子類擁有了父類的所有屬性和方法。 程式驗證,父類的私有屬性和方法子類是無法直接訪問的。當然私有屬性可以通過public修飾的

Java繼承成員中的問題

subclass 情況 討論 就會 之前 測試 public 測試結果 string   之前搞錯了,變量沒有“重寫”一說,只有方法才能被“重寫”。如果我們在子類中聲明了一個和父類中一樣的變量,那麽實際的情況是,子類的內存堆中會有類型和名字都相同的兩個變量。   現在考慮一

c++子繼承函式呼叫特性原理以及與java的對比

c++ c++中子類繼承了父類,子類物件的函式和變數會接著新增在父類物件的記憶體後面,以此類推。。。 如果c++中父類的那個變數或者函式宣告為virtual虛擬函式,那麼子類物件的同名函式就直接覆蓋了(即在記憶體中真正的覆蓋,父類的這個函式已經不在了)父類物件的這個函式 如

Java中子的構造方法

子類與父類的構造方法有兩點原則: 1、子類的構造方法必須呼叫父類的構造方法(原因為什麼,可參考此連結https://blog.csdn.net/y_dzaichirou/article/details/54920715) 2、被子類呼叫的父類構造方法必須存在(這

Java中子重寫方法

子類重寫父類方法 子類可以繼承父類的很多特性,但是在有些時候,父類提供的方法會出現不適用的情況,比如之前的例子裡, print() 方法就沒有打印出狗狗的品種,這種情況下就可以通過重寫父類的方法來解決問題,給它打印出來。 父類Pet類的程式碼不需要改變,在子類Dog類的基礎上作改動即

Java繼承的載入順序,看著一篇就夠了

1. 程式碼 package parent; public class Child extends Father { static { System.out.println("

java中的繼承-子繼承的許可權問題

                                                java中的繼承         Java語言面向物件有三大特性:封裝、繼承、多型。其中的繼承,描述了一

Java中子之間的呼叫關係

在講之前,一些基本知識是應該具備的: 1.如果一個類中沒有定義構造器,編譯器在編譯時會自動加上預設無參構造器: public ClassName {} 2. this 和 super 的區別。 3.每個類直接或間接是Object的子類,Object只有一個無參構造方法。

java中子重寫方法要注意的問題

子類不能重寫父類的靜態方法,私有方法。即使你看到子類中存在貌似是重寫的父類的靜態方法或者私有方法,編譯是沒有問題的,但那其實是你重新又定義的方法,不是重寫。具體有關重寫父類方法的規則如下:重寫規則之一:重寫方法不能比被重寫方法限制有更嚴格的訪問級別。 (但是可以更廣泛,比如