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.
关于Java方法和继承,通常不使用术语"重定义".通常使用两个术语:如你所说的"覆盖"和"重载".在Java重载是建立在同一个类中的两个方法具有相同的名称但不同的签名(数量和/或类型的参数).例如:
public interface MyInterface
{
public int doStuff(int first, int second);
public int doStuff(double only);
}
Run Code Online (Sandbox Code Playgroud)
要覆盖是执行类似于您在示例中所执行的操作:使用与父类中的方法具有相同名称和签名的方法创建子类,该方法将用于子类的所有实例但不是父类或该父类的任何其他子类.
您的示例与重载相关的唯一问题是使用关键字static.覆盖是动态确定的,但静态方法不是.
| 归档时间: |
|
| 查看次数: |
12928 次 |
| 最近记录: |