在下面的示例中,我使用的是 C#。
我创建了一个抽象类 Base_Collection
,然后我从它派生了其他类(Book
、Movie
、Game
)。但是,我不知道如何在不出现编译器错误的情况下添加可用于那些新子类的新方法。
namespace polymorphism_test_01
{
abstract class Base_Collection
{
public int id = 0;
public string title = "";
public Base_Collection() { }
}
}
namespace polymorphism_test_01
{
class Book : Base_Collection
{
public Book() { }
public override void Read_Book() { }
}
}
namespace polymorphism_test_01
{
class Game : Base_Collection
{
public Game() { }
public void Play_Game() { }
}
}
namespace polymorphism_test_01
{
class Movie : Base_Collection
{
public Movie() { }
public void Watch_Movie() { }
}
}
调用 book.Read_Book()
在以下代码段中不起作用,编译器将输出错误:
namespace polymorphism_test_01
{
class Program
{
public static void Main(string[] args)
{
Base_Collection book = new Book();
book.title = "The Dark Tower";
book.Read_Book();
Console.WriteLine(book.title);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
最佳答案
您可以毫无问题地向基类添加方法。您收到编译器错误的原因是您错误地使用了 override
关键字。
为了使用 override
关键字,方法名和签名必须与父类中的方法名和签名匹配,并且方法必须标记为 virtual
或 abstract
在基类中。两者区别解答here .
既然书、电影和电影都可以“表演”,你可能要考虑这样安排你的类(class):
abstract class Base_Collection
{
public int id = 0;
public string title = "";
public Base_Collection() { }
public virtual void PerformAction() { } // or public virtual void PerformAction(){ }
}
class Book : Base_Collection
{
public Book() { }
public override void PerformAction() { // read book }
}
class Game : Base_Collection
{
public Game() { }
public override void PerformAction() { // play game }
}
class Movie : Base_Collection
{
public Movie() { }
public void PerformAction() { // watch movie }
}
关于c# - 如何在从抽象类派生的类中创建新方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783362/