亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Java中使用super關鍵字調用父類

發布時間:2021-06-11 16:16:27 來源:億速云 閱讀:576 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關怎么在Java中使用super關鍵字調用父類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

package com.my.pac14;

/**
 * @auther Summerday
 */
public class SuperTest {
  public static void main(String[] args) {
    SubClass sb = new SubClass(20);
    //創建子類的對象,調用子類的print方法
    sb.print();
  }
}

class BaseClass {
  public int a = 5;
  public int b;
  static public int c = 30;

  BaseClass(int b) {
    this.b = b;
    System.out.println("superb:" + this.b);
  }

  public void print() {
    System.out.println("父類的a = " + a);
    //System.out.println(this.a);
  }

  public void read() {
    System.out.println("read..");
  }
}

class SubClass extends BaseClass {
  public int a = 10;
  //子類中的實例變量將父類中的隱藏,所以下面的this.b=0
  public int b;
  static public int c = 40;
  
  SubClass(int b) {
  //調用父類的構造器
    super(b);//20
    System.out.println("superb:" + super.b + ",subb:" + this.b);//0
  }

  public void print() {
    //打印父類中的a=5
    System.out.println(super.a);//5
    //調用父類的print方法,打印a=5
    super.print();//5
    //直接打印a,會打印出當前類的a,打印子類的a=10
    System.out.println("子類的a = " + a);
    //類變量也會覆蓋
    System.out.println(c);
    //用父類名訪問父類的類變量
    System.out.println("父類中的類變量c = " + BaseClass.c);
    //沒有重寫,不需要使用super調用父類方法
    read();
  }

}

super用于限定該對象調用從父類繼承得到的實例變量或方法,因此和this相同的是,super不能出現在static修飾的方法中。(因為static修飾的方法屬于類,調用者將會是類,而不是一個對象)

調用父類成員變量

實例變量

可以直接利用super.xx限定訪問父類的實例變量。

//父類
public int a = 5;
//子類
public int a = 10;
//在子類中訪問父類的實例變量
public void print() {
  //打印父類中的a=5
  System.out.println(super.a);//5
  //直接打印a,會打印出當前類的a,打印子類的a=10
  System.out.println("子類的a = " + a);
}

類變量

如果父類變量是用static修飾的類變量,則需要用父類類名.xx限定訪問其類變量。(雖然可以使用super訪問父類中的類變量,就像我們之前說的用類的實例訪問類變量,但是極不規范,不建議。)

//父類
static public int c = 30;
//子類
static public int c = 40;
//在子類中訪問父類的類變量
public void print() {
  //類變量也會隱藏
  System.out.println(c);
  //用父類名訪問父類的類變量
  System.out.println("父類中的類變量c = " + BaseClass.c);
}

總結:

  • 子類中沒有包含和父類同名的成員變量,就無需使用super或父類名顯式調用。

  • 如果在沒夠方法中訪問某成員變量,但沒有顯式指定調用者,則查找該成員變量的順序:

    • 查找該方法中有沒有。

    • 查找該類中有沒有。

    • 查找父類中有沒有。

    • ……

  • 如果沒有找到,就會報錯。

當創建一個子類對象時,系統不僅會為該類中定義的實例變量分配內存,也會為它從父類繼承得到的所有實例變量分配內存,即使子類定義了與父類中同名的實例變量。所以,子類中定義與父類同名的實例變量并不會完全覆蓋父類中定義的實例變量,只是簡單地隱藏。

調用父類的方法

我們之前說過,子類中定義與父類同名且參數列表相同的實例方法(static方法不能被重寫)就是所謂的方法重寫,此時子類的方法會覆蓋父類的方法。

  • 在子類中想調用父類的同名實例方法,可以利用:super.父類方法名;

  • 如果是類方法,則可以用父類名.父類方法名調用。(super依舊可以,但不建議)

  • 如果沒有同名,就不需要顯式用super調用父類方法。

//父類
public void print() {
  System.out.println("父類的a = " + a);
  //System.out.println(this.a);
}
public void read() {
  System.out.println("read..");
}
//子類
 public void print() {
  //調用父類的print方法,打印a=5
  super.print();//5
  //沒有重寫,不需要使用super調用父類方法
  read();
}

看完上述內容,你們對怎么在Java中使用super關鍵字調用父類有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英德市| 武清区| 四会市| 平乡县| 磐石市| 会同县| 宝兴县| 曲阜市| 成武县| 汉沽区| 简阳市| 东城区| 崇左市| 翁牛特旗| 师宗县| 大余县| 朝阳区| 武宁县| 志丹县| 通道| 遂昌县| 陆川县| 合阳县| 葵青区| 莒南县| 永川市| 丽江市| 泽库县| 天水市| 宜兰市| 墨脱县| 遵义市| 东阿县| 颍上县| 晋中市| 乌海市| 拉孜县| 洛阳市| 承德县| 沂水县| 彩票|