有关C#中子类override父类的方法的问题。 程序清单如下:
namespaceConsoleApplication2{publicclassBook{publicvirtualvoidSayHi(){Console.WriteLi...
namespace ConsoleApplication2
{
public class Book
{
public virtual void SayHi()
{
Console.WriteLine("Hi, I'm book");
}
public virtual void Introduce()
{
Console.WriteLine("I'm book");
}
}
public class JavaBook : Book
{
public override void Introduce()
{
Console.WriteLine("I'm Java");
}
//注意,此方法没有override父类的方法
public override void SayHi()
{
Console.WriteLine("Hi, I'm Java");
}
}
public class test
{
public test()
{
JavaBook javaBook = new JavaBook();
Book book = new JavaBook();
javaBook.Introduce(); //将调用JavaBook中Introduce()
book.Introduce(); //将调用JavaBook中Introduce()
javaBook.SayHi(); //将调用JavaBook中SayHi()
book.SayHi(); //将调用Book中SayHi()
}
public static void Main()
{
test t = new test();
Console.ReadLine();
}
}
}
//为什么会说子类中的SayHi()方法覆盖了父类中的SayHi()方法,而Introduce()就没有呢?跪求教。
我说反了,应该是:“为什么会说子类中的SayHi()方法没有覆盖了父类中的SayHi()方法,而Introduce()就覆盖了”? 展开
{
public class Book
{
public virtual void SayHi()
{
Console.WriteLine("Hi, I'm book");
}
public virtual void Introduce()
{
Console.WriteLine("I'm book");
}
}
public class JavaBook : Book
{
public override void Introduce()
{
Console.WriteLine("I'm Java");
}
//注意,此方法没有override父类的方法
public override void SayHi()
{
Console.WriteLine("Hi, I'm Java");
}
}
public class test
{
public test()
{
JavaBook javaBook = new JavaBook();
Book book = new JavaBook();
javaBook.Introduce(); //将调用JavaBook中Introduce()
book.Introduce(); //将调用JavaBook中Introduce()
javaBook.SayHi(); //将调用JavaBook中SayHi()
book.SayHi(); //将调用Book中SayHi()
}
public static void Main()
{
test t = new test();
Console.ReadLine();
}
}
}
//为什么会说子类中的SayHi()方法覆盖了父类中的SayHi()方法,而Introduce()就没有呢?跪求教。
我说反了,应该是:“为什么会说子类中的SayHi()方法没有覆盖了父类中的SayHi()方法,而Introduce()就覆盖了”? 展开
2个回答
展开全部
我运行过,父类方法都被override 了,
Book book = new JavaBook();这里你实际创建的是一个用父类类型接收的子类对象。和 JavaBook javaBook = new JavaBook();创建的对象一样都是子类对象。子类继承父类,子类又都override 了父类的虚方法
所以你调用子类对象的方法自然都重写了父类的方法。
如果你这样 Book book = new Book();创建父类对象,就不会重写父类方法。
你可以试试看。
Book book = new JavaBook();这里你实际创建的是一个用父类类型接收的子类对象。和 JavaBook javaBook = new JavaBook();创建的对象一样都是子类对象。子类继承父类,子类又都override 了父类的虚方法
所以你调用子类对象的方法自然都重写了父类的方法。
如果你这样 Book book = new Book();创建父类对象,就不会重写父类方法。
你可以试试看。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询