簡體   English   中英

為什么我不能在子類中分配變量?

[英]why I can't assign variable in subclass?

為什么我不能在子類中分配變量i?

class a {
   int i;
}


class b extends a {
   i=1;
}

您可以在子類中分配變量。 不能做的是僅允許聲明的put語句。 (請注意, int i = 10;是聲明-不是聲明。)

在這種情況下,構造函數很可能是建立默認值(用於子類型)的合適位置:

class b extends a {
  public b () {
    i = 1;
  }
}

正如damo所建議的,初始化塊也將起作用。 初始化字段教程對此進行了討論:

通常,您可以在構造函數中放置代碼來初始化實例變量 [但是]使用構造函數來初始化實例變量有兩種選擇:初始化程序塊和final方法。

所有答案都是正確的,但沒有人說您可以這樣做。

class b extends a {
   {
    i=1;
   }
}

這將在a constructorb constructor a constructor之前編譯並執行

當您使用默認的訪問修飾符時,這意味着類a中的屬性可被同一包中的所有類(包括子類b 但是,您必須在方法中訪問該屬性。

class a {
   int i; // this is an instance variable
}

實例變量是類級別的,可以將它們分配給文字變量或引用變量,也可以將其保留為默認值,子類可以在方法級別或構造函數中使用公共實例,而不必像在類級別那樣:

class b extends a {
 i = 3; // assgining a literal to i is compilation error
}

因為這是Class字段和Instance變量聲明的位置,所以不將超類的instance變量分配給某些對象。

如果要在類a中使用i ,則必須在某些方法或構造函數中使用它。

class b extends a {
 a(){
  i = 4;
} 

void doSomething(){
 i = 5;
}
}

暫無
暫無

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

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