以下哪种方法是过载,哪种是超载?

时间:2019-07-18 14:12:22

标签: java overriding overloading

我明白了,但我不明白为什么我们的教授说这是最重要的。因为参数类型不同于具有相同名称的相同方法的类型,所以不应该覆盖它吗?

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);
    }
}

2 个答案:

答案 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".

试用此代码,我相信您会弄清楚的。

相关问题