2015-05-12 4 views
0

У меня есть абстрактный класс Animal Глядя, как этотПерекрытие toSting в производном классе

abstract class Animal{ 
    protected int numberOfPaws; 

    public abstract String speak(); 

    public String toString(){ 
     return "I have " + numberOfPaws + " paws"; 
    } 
} 

Тогда я производный класс, который имеет новую реализацию toString() глядя, как этот

class Cow : Animal{ 
    public Cow : base(4) {} 

    public override String speak(){ 
     return "Moo!"; 
    } 

    public new Strinf toString(){ 
     return "I am a Cow " + base.toString(); 
    } 
} 

И у меня есть в основном выглядящий

void Main{ 
    Cow c = new Cow(); 

    Console.WriteLine(c.toString()); 
} 

Но когда я запускаю этот он печатает UserQuery+Cow на консоль.

У меня нет понятия, что я делаю неправильно? Это делает это из-за base.toString()?

+0

Во-первых, так как вы используете интерфейс, Вы должны изменить вашу инициализацию корову Cow c = new Animal(); – MajkeloDev

+1

@MajkeloDev Нет, это должно быть «Animal c = new Cow();'. –

+0

О, ты прав. – MajkeloDev

ответ

3

Используйте override ключевое слово:

abstract class Animal 
{ 
    protected int numberOfPaws; 

    public abstract String speak(); 

    public override string ToString(){ 
     return "I have " + numberOfPaws + " paws"; 
    } 
} 

class Cow : Animal 
{ 
    public Cow : base(4) {} 

    public override String speak(){ 
     return "Moo!"; 
    } 

    public override string ToString(){ 
     return "I am a Cow " + base.ToString(); 
    } 
} 
+0

, если я делаю 'public переопределять String toString()' в 'Animal', он дает ошибку, говоря, что он не может найти подходящий метод для переопределения –

+1

' ToString', а не 'toString' –

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