Java 繼承隱藏

2024-01-08 09:54 更新

Java面向?qū)ο蟮脑O(shè)計 - Java繼承隱藏

方法隱藏

類從其超類繼承所有非私有靜態(tài)方法。

重定義類中繼承的靜態(tài)方法稱為方法隱藏。

子類中的重定義靜態(tài)方法隱藏其超類的靜態(tài)方法。

在類中重定義非靜態(tài)方法稱為方法覆蓋。

關(guān)于方法隱藏的重定義方法(名稱,訪問級別,返回類型和異常)的所有規(guī)則與方法覆蓋相同。

class MySuper {
  public static void print() {
    System.out.println("Inside MySuper.print()");
  }
}

class MySubclass extends MySuper {
  public static void print() {
    System.out.println("Inside MySubclass.print()");
  }
}

public class Main {
  public static void main(String[] args) {
    MySuper mhSuper = new MySub();
    MySubclass mhSub = new MySubclass();
    MySuper.print();
    MySubclass.print();
    ((MySuper) mhSub).print();
    mhSuper = mhSub;
    mhSuper.print();
    ((MySubclass) mhSuper).print();
  }
}

上面的代碼生成以下結(jié)果。

字段隱藏

類中的字段聲明(靜態(tài)或非靜態(tài))在其父類中隱藏具有相同名稱的繼承字段。

在字段隱藏的情況下,不考慮字段的類型及其訪問級別。

字段隱藏僅基于字段名稱。

class MySuper {
  protected int num = 100;
  protected String name = "Tom";
}

class MySub extends MySuper {
  public void print() {
    System.out.println("num: " + num);
    System.out.println("name: " + name);
  }
}

class MySub2 extends MySuper {
  // Hides num field in MySuper class
  private int num = 200;

  // Hides name field in MySuper class
  private String name = "Jack";

  public void print() {
    System.out.println("num: " + num);
    System.out.println("name: " + name);
  }
}

public class Main {
  public static void main(String[] args) {
    MySub fhSub = new MySub();
    fhSub.print();
    MySub2 fhSub2 = new MySub2();
    fhSub2.print();
  }
}

上面的代碼生成以下結(jié)果。

例子

以下代碼顯示了如何使用super關(guān)鍵字訪問超類的隱藏字段

class MySuper {
  protected int num = 100;
  protected String name = "Tom";
}

class MySub extends MySuper {
  // Hides the num field in MySuper class
  private int num = 200;

  // Hides the name field in MySuper class
  private String name = "Jack";

  public void print() {
    System.out.println("num: " + num);
    System.out.println("super.num: " + super.num);
    System.out.println("name: " + name);
    System.out.println("super.name: " + super.name);
  }
}

public class Main {
  public static void main(String[] args) {
    MySub s = new MySub();
    s.print();
  }
}

上面的代碼生成以下結(jié)果。

字段隱藏發(fā)生在一個類聲明一個變量與來自其超類的繼承變量具有相同名稱的時候。

字段隱藏僅基于字段的名稱。

類應(yīng)該使用關(guān)鍵字super來訪問超類的隱藏字段。

類可以使用簡單的名稱來訪問其主體中的重定義字段

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號