Хорошо, медведь со мной, ребята и девочки, когда я учусь. Вот мой вопрос.
Я не могу понять, почему я не могу переопределить метод из родительского класса. Вот код из базового класса (да, я похитил код Java из книги ООП и пытаюсь переписать его на С#).
using System;
public class MoodyObject
{
protected String getMood()
{
return "moody";
}
public void queryMood()
{
Console.WriteLine("I feel " + getMood() + " today!");
}
}
и вот мои другие 2 объекта, которые наследуют базовый класс (MoodyObject):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class SadObject: MoodyObject
{
protected String getMood()
{
return "sad";
}
//specialization
public void cry()
{
Console.WriteLine("wah...boohoo");
}
}
}
и
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class HappyObject: MoodyObject
{
protected String getMood()
{
return "happy";
}
public void laugh()
{
Console.WriteLine("hehehehehehe.");
}
}
}
и вот моя главная:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MoodyObject moodyObject = new MoodyObject();
SadObject sadObject = new SadObject();
HappyObject happyObject = new HappyObject();
Console.WriteLine("How does the moody object feel today?");
moodyObject.queryMood();
Console.WriteLine("");
Console.WriteLine("How does the sad object feel today?");
sadObject.queryMood();
sadObject.cry();
Console.WriteLine("");
Console.WriteLine("How does the happy object feel today?");
happyObject.queryMood();
happyObject.laugh();
}
}
}
Как вы можете видеть, довольно простой материал, но вот вывод:
Как чувствует себя капризный объект? Сегодня я чувствую себя угрюмым!
Как чувствует себя грустный объект? я чувствую себя капризным сегодня! вах... громко рыдать или смеяться
Как чувствует себя счастливый объект? Сегодня я чувствую себя угрюмо! hehehehehehe. Нажмите любую клавишу для продолжения.,.
Не так, как я ожидал. Я попытался сделать базовый метод виртуальным и вызывать переопределение при попытке переопределить его, и это просто вызывает у меня эту ошибку "не может переопределить унаследованный элемент MoodyObject.getMood()", потому что он не помечен как виртуальный, абстрактный, так и переопределенный ". Я также попробовал это без виртуального и переопределить, и он думает, что я пытаюсь скрыть базовый метод. Опять же, я новичок в ООП и буду признателен за любые рекомендации.
EDITED TO ADD: Я нашел его! MoodyObject.cs был всего лишь "элементом решения" в проводнике решений, а не элементом "ConsoleApplication1". Я перетащил его туда, где он принадлежал исследователю решений и вуаля! Он работает сейчас. Я отметил Люк ниже, как ответ, потому что он предложил помощь, в которой я нуждался, чтобы добраться до того, где я ее разрешил... Я так много учусь здесь. Это потрясающе, и вы, ребята, и девочки сумасшедшие умные!