我明白了,但我不明白为什么我们的教授说这是最重要的。因为参数类型不同于具有相同名称的相同方法的类型,所以不应该覆盖它吗?
public void stuff(char x) { // overloading? overriding?
System.out.println("x is a char in overRide");
}
我在下面为上下文提供了一些代码
class OverLoad {
public int xyz = 9;
public void stuff(int x) {
System.out.println("x is an int in OverLoad");
}
public void stuff(double x) {
System.out.println("x is a double in OverLoad");
}
}
class OverRide extends OverLoad {
public int xyz = 99; // don't do this! creates confusion public void
stuff(char x) { // overloading? overriding?
System.out.println("x is a char in overRide");
}
public void stuff(int x) {
System.out.println("x is an int in overRide");
System.out.println("call parent stuff(int x)");
super.stuff(x);
}
}
答案 0 :(得分:0)
发布代码时,您应尝试使用代码格式,以便于阅读。
重写方法是指重新定义从另一个类(例如,继承)获得的方法。人们经常重写例如类继承的toString()方法。您总是使用@Override对其进行注释。
重载是当您定义名称相同但签名(例如返回类型或参数)不同的方法时,例如:
public void add(int x, int y){};
public void add(double x, double y){};
答案 1 :(得分:0)
“重载”是指具有相同名称的相同类型的不同方法的概念:
public class Animal {
void m(int x) {System.out.println("Animal::int";}
void m(double y) {System.out.println("Animal::double";}
}
之所以称为过载,是因为它就是所谓的。为什么将“红色”称为“红色”?
请注意,在Java中,选择哪种方法重载是在编译时确定的。
另一方面,'overriding'正在重新定义您的超类型中方法的实现。所以:
public class Dog extends Animal {
void m(int x) {System.out.println("Dog::int";}
}
此处,m
类中的Dog
方法将覆盖Animal中的两个m
方法之一。
这不是在编译时确定的,而是在运行时确定的:
Animal a = new Dog(); // legal java; all Dogs are Animals
a.m(5); // prints "Dog::int", not "Animal::int"
a.m(10.0); // prints "Animal::double".
试用此代码,我相信您会弄清楚的。