我不确定一件事。面向对象编程有两件事。
构造
方法
哪一个可以重载,哪一个可以覆盖?
谢谢!
答案 0 :(得分:1)
这可能取决于语言,但理论上两者都可以重载和覆盖。
所有内容的C#示例:
class Parent {
protected string Name;
public Parent(string name) {
this.Name = name;
}
public Parent(string firstName, string lastName) {
this.Name = firstName + " " + lastName;
}
public virtual string GetName() {
return this.Name;
}
}
class Child : Parent {
public Child(string firstName) : base(firstName, "Doe") {}
public override string GetName() {
return this.Name = " Jr.";
}
public string GetName(string prefix) {
return prefix + " " + this.GetName();
}
}
这说明了构造函数和方法重写以及构造函数和方法重载。
答案 1 :(得分:1)
两者都可以超载。 重载意味着具有两个或多个具有完全相同名称但签名不同的方法或构造函数。有点像:
public myClass(String a){} public myClass(Double d){}
或方法:
public void aMethod(String s){} publis int aMethod(Double d){ return 0; }
编辑: bebin,overriding通常带有继承,当超类实现一个方法但子类需要以其他方式实现该方法时: 超级课程:
public int doSomething(){ return a+2; }
但在子类中:
@override public in doSomething(){ return a*2; }
以及关于覆盖以下行的构造函数来自CollinD,我引用它: “构造函数不是常规方法,它们不能被”覆盖“。说构造函数可以被重写意味着超类构造函数是可见的,可以调用它来创建子类的实例。这不是真的......默认情况下,子类没有任何构造函数(如果它扩展的类有一个,则为非arg构造函数除外)。它必须显式声明任何其他构造函数,并且这些构造函数属于它而不属于它的超类,即使它们是采用与超类构造函数相同的参数。
你提到的关于默认没有arg构造函数的东西只是构造函数工作方式的一个方面,与覆盖无关。“
答案 2 :(得分:0)
您可以重载和覆盖构造函数和方法。 (我认为构造函数实际上只是一种特殊的方法。)
Overriding允许子类替换其父类的实现。
重载允许您创建采用不同参数列表的方法的不同版本。