[英]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 constructor
和b 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.