2014-01-09 3 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 s являются A s.
Это не значит, что все A s - B s.

1

Давайте переписывают это, используя более осмысленные имена, просто для наглядности: (Метод не очень отношение к этой проблеме, я опустил ее)

public class Animal 
{ 
} 

public class Person : Animal 
{ 
} 

Animal animal; 
Person person; 

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

Человек является животным. Животное не человек.

+0

+1 ... также я бы использовал более традиционный' Cat' вместо 'Person' в образце ... Не каждый" человек животное ", некоторые немного приятнее :). –

Смежные вопросы