C在子類中呼叫不到父類的protected成員

時間 2021-08-14 20:34:09

1樓:匿名使用者

//先看正確的例子

class program : a

}class a

對基類中protected成員的訪問,必須滿足:

基類中的protected成員,只能從(ⅰ)基類內部非靜態方法訪問(ⅱ)繼承這個基類的子類內部的非靜態方法訪問

-------

1)在問題中第1個程式中的錯誤是因為:你試圖從a類的外部訪問a內的protected成員。

2)在問題中第2個程式中的錯誤是因為:雖然將類program作為a的子類,但你試圖從子類的靜態方法(即main方法)訪問基類的protected成員。

2樓:匿名使用者

a test = new a();宣告出來的是一個新的類,和你繼承的沒有關係,所以會報錯

想用繼承類a的protected變數,可以用 this.age

3樓:陽光的雷咩咩

最好不要用program繼承自其他類,試試其他的吧。

4樓:匿名使用者

c# 在子類中例項化父類物件,然後用父類物件訪問父類中protected屬性或方法

5樓:然後去遠足

看來題主沒理解 protected 關鍵字到底是幹嘛的呀。

protected 是既不同於 public 的全公開、也不同於 private 的全不公開的,是一種半公開控制級別,外界無法直接訪問這個控制級別的成員,但是派生類的 base 指標可以獲得訪問能力。

困擾好久了,趕高手就我!關於c#子類訪問父類protected 成員。

6樓:匿名使用者

class car 繼承了 vehicle以後 this.weight 可以訪問。這叫繼承。。。

或者 ((vehicle)this).weight 也可以。

你在哪new那也叫例項化,跟繼承沒半毛錢關係。

7樓:陽光的雷咩咩

無法通過型別「type1」的限定符訪問保護成員「member」;限定符必須是型別「type2」(或者從該型別派生的)

派生的類無法通過基類的例項來訪問其基類的受保護成員。 在派生的類中宣告的基類的例項在執行時可能是另一個型別的例項,該型別從相同的基派生但與派生的類無關。 由於受保護成員只可由派生的型別訪問,因此要訪問可能在執行時無效的受保護成員的任何嘗試都會由編譯器標記為無效。

再結合你的**,你的**看似是宣告瞭個vehicle,但如果你這樣寫呢?

vehicle v1 = new vehicle();

train t=new train();

v1=t;

v1.weight //此時你認為訪問到的是vehicle的還是train的,v1現在是train,car不派生自train,因此不能訪問。我沒有改動你的**,只是新增了額外的一句,造成了不能訪問。

而編譯器按照最保險的原則報錯。

8樓:evil瓜

定義好的類都沒有例項化

繼承關係中子類是跟父類重名的方法子類是會覆蓋掉父類的

類train壓根就沒有繼承父類就算你在類中new 了車的類但是它的weight的欄位是protect修飾符只供繼承它的子類訪問,而wheels 欄位是是public所以可以賦值

C中在子類中訪問父類成員的關鍵字是什麼

最紳士的痞子灬 使用base.呼叫父類裡面的屬性 public class parent public class child parent 1 父類不能直接強制轉換成子類 2 子類可以強制轉換成父類,但是在父類中只能取父類的欄位與方法因此在一個父類對應多個子類的時候,不知道具體是哪個子類的時候,就...

C類的問題基類成員函式可以呼叫子類的成員函式嗎

父類 子類 這種關係,本來設計就是把 具備共性的東西放在父類裡,不具備共性的放在子類裡.嚴格來說,父類是不能去呼叫某個子類特有的介面的.你這樣瞎搞 就破壞了這種構架,只能讓程式紊亂.所以你可以這樣子 在父類立面設計一個通用介面,然後對這個通用介面下指令,子類收到這個訊息,大多不處理,只有那個特殊的子...

在c語言中怎樣用c 類中的物件呼叫c 類中的方法

之間的差異的c語言和c 有很多 新的程式程式思維,c語言是程序導向的,和c 物件。2,c語言的標準庫,他們是鬆散的,但在標頭檔案中相同的功能和c 的大部分功能都整合非常緊密,特別是c語言不是在c api window系統最api的有機結合,是一個集體。但你也可能是一個單獨的api呼叫。3,特別是在c...