黑马程序员技术交流社区
标题:
抽象方法、虚方法、覆盖的区别
[打印本页]
作者:
9881008杜鹏
时间:
2011-11-27 15:25
标题:
抽象方法、虚方法、覆盖的区别
本帖最后由 9881008杜鹏 于 2011-11-27 15:31 编辑
abstract class Person
{
public Person(string name, string address, string holiday)
{
this.name = name;
this.address = address;
this.holiday = holiday;
}
protected string name;
protected string address;
protected string holiday;
public string Name {set;get;}
public string Address { set; get; }
public string Holiday { set; get; }
public abstract void SayHello();
public void Hello()
{
Console.WriteLine("Hello everyone !");
}
public virtual void HappyHoliday()
{
Console.WriteLine("这是我们的传统节日,这一天...");
}
}
class ChinesePerson: Person
{
public ChinesePerson(string name, string address, string holiday)
: base(name, address, holiday)
{
Console.WriteLine("我是来至:{0} 的 {1},我们的传统节日是:{2}",address,name,holiday);
}
public override void SayHello() //重写父类的抽象方法
{
Console.WriteLine("大家好,我是来自中国的萧逸,欢迎指教!");
}
public new void Hello() //重写(覆盖)父类的Hello方法New:隐藏。
{
Console.WriteLine("{0}是我们的传统节日,每年的这段时间是世界人将面临一次大迁徙!\n 他们不远千里奔袭一个地方:家!",holiday );
}
public override void HappyHoliday() //重写虚方法
{
Console.WriteLine("{0}祝大家{1}快乐喔,O(∩_∩)O哈哈~",name ,holiday );
}
}
static void Main(string[] args)
{
Person chineseperson = new ChinesePerson("萧逸","中国","春节");
chineseperson.Hello(); chineseperson.SayHello();
ChinesePerson chinese = new ChinesePerson("萧逸", "中国", "春节");
chinese.Hello();
chineseperson.HappyHoliday();
Console.ReadKey();
}
为什么chineseperson.Hello(); 不能调用在子类中的Hello()方法???
作者:
王伟
时间:
2011-11-27 16:14
抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。
作者:
刘景发
时间:
2011-11-27 17:28
为什么chineseperson.Hello(); 不能调用在子类中的Hello()方法???
不太明白楼主要表达的意思啊……
原因可能有两种:一、子类使用了new关键字屏蔽父类的方法,则调用谁的方法由“定义时的类型决定”;二、子类使用override关键字重写父类方法,则调用谁的方法由”运行时引用真实的对象决定。
作者:
唐煜婷
时间:
2011-11-29 14:04
1. 虚方法必须有实现部分,并为派生类提供了覆盖该方法的选项 抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化
2. 抽象方法只能在抽象类中声明, 抽象方法必须在派生类中重写 虚方法不是 也不必要重写。其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。
3. 抽象方法必须在派生类中重写,这一点跟接口类似,虚方法不必。抽象方法不能声明方法实体 而虚方法可以
包含抽象方法的类不能实例化 ,而包含虚方法的类可以实例化!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2