2014-01-09 118 views
-2

我有以下兩類出錯創建繼承類的實例

public class A 
{ 
    public virtual decimal Sum(int x, int y) 
    { 
      return x+y; 
    } 
    } 

public class B : A 
{ 
     public override decimal Sum(int x, int y) 
     { 
      return x+y+1; 
     } 
} 

我寫在主類

A myobj1; 
    B myobj2; 

    myobj1 = new B(); 
    myobj2 = new A(); 

下面的代碼爲什麼第二個對象給我的Cannot implicitly convert type 'ClassLibrary3.A' to 'ClassLibrary3.B'. An explicit conversion exists (are you missing a cast?)class B繼承錯誤class A

+0

您已將此標記爲Java問題。這與Java有什麼關係? –

+2

是的,但A從B繼承?畢竟,你試圖將A分配給B。 – Servy

+0

它是'OOP'中的一個通用問題,所以這兩種語言都會與它相關 –

回答

3

但是,B類繼承了A類

這意味着所有B都是A s。
這並不意味着所有A都是B s。

1
此使用更有意義的名稱,

讓我們重新寫只是爲了清楚起見:(方法是不是這個問題確實有關,我省略了它,)

public class Animal 
{ 
} 

public class Person : Animal 
{ 
} 

Animal animal; 
Person person; 

animal = new Person(); 
person = new Animal(); 

這個人是一種動物。動物不是一個人。

+0

+1 ...我還會在樣本中使用更傳統的'Cat'而不是'Person' ...並非每個人都是動物「有些更好一點:)。 –