C# 重载与重写的区别
请问重载之后,父类中的那个函数也变掉了吗?当调用父类的相应的方法时出现的是子类的吗?例如:publicPerson{publicvoideat(){console.Wri...
请问重载之后,父类中的那个函数也变掉了吗?当调用父类的相应的方法时出现的是子类的吗?例如:
public Person
{
public void eat()
{console.WriteLine("father");}
}
class Amer
{
public void eat()
{console.WriteLine("son");}
}
Person per=new Person();
per.eat();
那么将显示的是什么?为什么?谢谢! 展开
public Person
{
public void eat()
{console.WriteLine("father");}
}
class Amer
{
public void eat()
{console.WriteLine("son");}
}
Person per=new Person();
per.eat();
那么将显示的是什么?为什么?谢谢! 展开
6个回答
展开全部
任何类中的方法都可以重载,重载后的方法实际上是不同的方法,只是他们的名称相同罢了.
重写只能是子类override父类中的虚方法,他们是完全相同的方法,重写之后子类中的方法是新版本,父类中被override的方法是旧版本,默认的都是调用新版本的方法
重写只能是子类override父类中的虚方法,他们是完全相同的方法,重写之后子类中的方法是新版本,父类中被override的方法是旧版本,默认的都是调用新版本的方法
追问
如果子类中重载父类的方法后(比如用new),那当构造父类的实例并通过该实例调用父类的相应的方法的时候,调用的是父类的还是子类的方法?
追答
用new不叫重載父類的方法,用new了叫做隱藏父類的成員,也叫隱藏基類的成員,copy二樓的幾句話
重载,方法名称必须相同,参数必须不同。
重写,方法名称必须相同,参数也要相同。
如果你構造父類的實例,那麼當然調用的就是父類的方法了.,面向對象很重要的一點,通俗的說就是,兒子可以代表老子,但是老子是不能代表兒子的
展开全部
重写overriding是父类与子类之间多态性的一种表现,重载overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写
(overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading)。overloaded的方法是可以改变返回值的类型。
(overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading)。overloaded的方法是可以改变返回值的类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重载,方法名称必须相同,参数必须不同。
重写,方法名称必须相同,参数也要相同。
运行这段代码 你就知道了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 实验1
{
class Person
{
public void eat()
{
Console.WriteLine("father");
}
}
class Amer:Person
{
public void eat(string s)
{
Console.WriteLine("son");
}
}
class MainClass
{
static void Main()
{
string m = "";
Person per = new Person();
per.eat();
Amer am = new Amer();
am.eat();
am.eat(m);
}
}
}
重写,方法名称必须相同,参数也要相同。
运行这段代码 你就知道了
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 实验1
{
class Person
{
public void eat()
{
Console.WriteLine("father");
}
}
class Amer:Person
{
public void eat(string s)
{
Console.WriteLine("son");
}
}
class MainClass
{
static void Main()
{
string m = "";
Person per = new Person();
per.eat();
Amer am = new Amer();
am.eat();
am.eat(m);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重载,方法名相同参数不相同
重写,方法名参数都相同,子类方法覆盖父类方法
另外你给的两个类根本就不是子父类关系。
所以输出的还是“father”
public Person
{
public void eat()
{console.WriteLine("father");}
}
class Amer :Person
{
public void eat()
{console.WriteLine("son");}
}
Amer per=new Amer ();
per.eat();
这时输出的是son
Person per = new Amer();
per.eat();
这时输出的是father
重写,方法名参数都相同,子类方法覆盖父类方法
另外你给的两个类根本就不是子父类关系。
所以输出的还是“father”
public Person
{
public void eat()
{console.WriteLine("father");}
}
class Amer :Person
{
public void eat()
{console.WriteLine("son");}
}
Amer per=new Amer ();
per.eat();
这时输出的是son
Person per = new Amer();
per.eat();
这时输出的是father
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-11-09
展开全部
没有什么继承关系呀?这样的代码,应该输出father
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询