重新定义方法和覆盖方法之间有什么区别?

eno*_*non 7 java

class DonkeyBattler {

    static void doBattle(){
        System.out.println("Weaponized donkey battling");
    }

}

class FunkyBattler extends DonkeyBattler {

    static void doBattle(){
        System.out.println("Weaponized donkey battling with bellbottoms");

    }
}
Run Code Online (Sandbox Code Playgroud)

doBattle方法应该是重新定义还是覆盖?哦顺便说一句,这是Java.

And*_*yle 12

我从来没有听说过"重新定义"作为应用于Java的OO术语.

但是,您提供的示例不是重写,因为静态方法不是继承的,而是基于变量的类型静态分派(与成员方法发生的动态分派相反).

我不会把它称为re定义,但是你有一个名为的方法DonkeyBattler.doBattle,你现在已经定义了一个名为compiletely的单独方法FunkyBattler.doBattle.


jus*_*tkt 6

关于Java方法和继承,通常不使用术语"重定义".通常使用两个术语:如你所说的"覆盖"和"重载".在Java重载是建立在同一个类中的两个方法具有相同的名称但不同的签名(数量和/或类型的参数).例如:

public interface MyInterface
{
    public int doStuff(int first, int second);
    public int doStuff(double only);
}
Run Code Online (Sandbox Code Playgroud)

要覆盖是执行类似于您在示例中所执行的操作:使用与父类中的方法具有相同名称签名的方法创建子类,该方法将用于子类的所有实例但不是父类或该父类的任何其他子类.

您的示例与重载相关的唯一问题是使用关键字static.覆盖是动态确定的,但静态方法不是.

  • 有两个名为相同的静态方法就好像我有两个完全不同的方法吗? (2认同)