【发布时间】:2012-11-26 19:52:34
【问题描述】:
在以下示例中,我使用的是 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() { }
}
}
在下面的sn-p中调用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);
}
}
}
【问题讨论】:
-
您收到编译器错误的原因是因为您正在创建一个
Book对象并将其转换为其基本类型。当您尝试在其上调用Read_Book()时,这将不起作用,因为在Base_Collection类型上没有定义Read_Book()。Read_Book()仅在Book类型上定义。您将通过将您的书创建为Book book = new Book();并从您的Read_Book()方法定义中删除override关键字来修复您的编译器错误。
标签: c# oop inheritance polymorphism abstract-class