1樓:
我認為是你沒加修飾符的原因。沒加的話預設是freind。關於強制轉換,就是介面和父子類這些的控制代碼處理。
這些在課本上有動手練練就熟了。這個問題提的很好,動手能力也很強啊!贊一個。
2樓:匿名使用者
父類實體永遠不可能轉換成子類引用成功。
父類引用的實體本身是子類例項時能轉換為子類引用。
子類實體可以用父類型別引用,也可以用子類本身型別引用。
父類實體只能用本身型別引用,除非該父類又是另一個類的子類。
子類擁有比父類多的功能,功能多的轉換為功能少的可以,但是功能少的要轉換為功能多的那是不可能的,因為它根本不具備某些方法。
子類和父類轉換這句話應該說成是 子類實體(父類實體)轉換為父類引用(子類引用)。
3樓:匿名使用者
當你使用a a = new c();的時候其實你宣告的是一個a類只是你使用了c類去實體化他。那麼a類在這裡就有點像介面。你在c類中你過載了area()方法。
所以你呼叫a.area()時就是c類中的內容。但是你的a類中的name屬性你沒有提供get和set方法並且int name = 3;這種方法將會使其預設為私有方式儲存。
雖然你在c類中使用了同樣的宣告int name = 4;但是雖然這兩個屬性其屬性名相同但是他們指向不同的地址。事實上說是不同的變數。當你使用a.
name呼叫屬性時,由於宣告時你宣告的是a類那麼它自然訪問a類中的name屬性。
當你使用c c = new c();的時候其實你宣告的是一個c類你又使用了c類去實體化他。那麼當你使用c.name時你訪問的自然就是c類中的name屬性了。
還有當你把a類中的area()方法刪去但是a類中保留時。如果你使用如下的宣告方式:
a a = new c();那麼你宣告瞭一個a類而且你使用c類去實體化他。因為a類中沒有area()方法所以c類中的area()方法不會去實體化到這個宣告中去(這有點像介面,你例項化介面也是一樣的)。所以你呼叫a.
area()自然會報錯。因為a類沒有這個方法。哪怕c類有這個方法你用c類去實體化也不會實體化這個方法的。
4樓:
c c = new a();
a a = (a)c;
這樣就可以了,其它的還沒細看,看完了,再補充
j**a基礎父類強制轉換成子類,錯誤!
5樓:豪豪麻麻
父類怎麼能轉換成子類呢??子類包含的變數和函式,父類未必會有,能轉換才怪呢!!不符合一般的邏輯。
6樓:匿名使用者
你這要能轉換成功 就神奇了。
你的記住 子類繼承父類的所有方法 屬性 但是子類有可能有自己獨有的方法 父 類沒有。按照你那寫法根本就不是多型 。你 寫a a=new b(); 就可以了 b b=(b)aa才對
7樓:匿名使用者
你這種轉法是錯誤的呀
邏輯不對。
你可以這樣轉
a aa=new b();
((a)(a)).geta();
當然 這個也還是呼叫子類的方法!
8樓:一個正直的吧友
public class testinheritance}
9樓:匿名使用者
你是學習多型吧
a aa=new a();
b bb=(b)aa;
改成a aa=new b();
C中在子類中訪問父類成員的關鍵字是什麼
使用base.呼叫父類裡面的屬性 public class parent public class child parent 1 父類不能直接強制轉換成子類 2 子類可以強制轉換成父類,但是在父類中只能取父類的欄位與方法因此在一個父類對應多個子類的時候,不知道具體是哪個子類的時候,就可以先宣告一個父...
如何查詢抽象類的所有子類,如何查詢一個抽象類的所有子類
子類b只要實現了抽象類a,就一定要實現抽象類a中的抽象方法。如果子類b不實現抽象類a中的 抽象 方法,那麼除非將子類b也宣告為一個抽象類。但是如果子類b還有子類c,並且這個子類c不是抽象類,就要實現父類b和父類的父類c所有抽象方。例如,sql server 2000因為你這裡說了只有 分類,所以我就...
C中父類的虛擬函式必須要實現嗎
虛擬函式是自帶實現的,因此派生類中可以選擇實現自己的,也可以直接使用基版類的。但是純虛擬函式一般權未提供實現,所以派生類基本需要提供實現,但是即使基類提供了預設實現,如果派生類需要進行例項化,那麼派生類還是需要提供實現的。你可以定義純虛擬函式,這部需要實現 c 中虛擬函式必須有定義嗎?需要例項化類的...