簡體   English   中英

僅當創建父 class 實例時,java 中的關鍵字是否要求派生的 class 繼承屬性?

[英]Does the keyword extends in java require the derived class to inherit attributes only when a parent class instance is created?

如果我有 Class A 和 ClassB 擴展 ClassA。 當 ClassB 嘗試訪問 ClassA 的屬性、方法等時,是否會自動創建 ClassA 實例?

如果是這樣,如果 ClassA 是抽象 class 會發生什么??我們不能手動創建抽象 class 的實例,但是 JVM 如何處理這種情況,或者 ClassB 如何在沒有抽象的情況下嘗試訪問 ClassA 的實例(被創建的 ClassA 的成員) )

沒有ClassB,任何ClassA都不能獨立存在。 必須通過 new 運算符創建 Class 的實例。 要獲得 B 的實例,必須在系統中調用某個位置,例如:

new ClassB();

如果只有這樣的電話:

new ClassA();

然后不存在 B 的實例,因此 ClassB 中的任何內容(除了 static 方法)都是無關緊要的。 為了簡單起見,我在這里忽略了通過反射創建新實例。

Inheritance 從 parent 向下流向 child,因此 child 可以訪問 parent 上的 public、protected 或 package 私有方法(取決於 ClassA 和 ClassB 聲明的包); 但父母不能訪問孩子的方法。 但是通過多態性,可以優先執行子級上的方法而不是父級上的方法。

我認為您應該閱讀一些Java 教程

When a class extends another class in Java, and then gets instantiated, there is only one object that gets created, and that object has all of the methods and variables of its parent's type that it is legally allowed to inherit. 您不必實例化這兩個對象。 另一種說法是:

假設您有 class A:

public class ClassA{
  public int var1
  private int var2

  public void method1(){...}
  private void method2(){...}
}

還有 class B:

public class ClassB extends ClassA{
  public int newVar1

  public void newMethod1(){...}
}

實際上,Class B 實際上看起來像這樣:

public class ClassB extends ClassA{
  public int var1
  public int newVar1

  public void method1(){...}
  public void newMethod1(){...}
}

我有 B 擴展 A,無論何時創建 B,B都是A,所以存在 A。 它不作為單獨的 object 存在,但 B 是 A,所以 B 擁有 A 所擁有的一切。 A可以沒有B而存在。

如果 A 是抽象的,那么您不能創建 As。 當您創建 B 時,它具有 A 的所有屬性/方法,因為它A。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM