【Java】覆写备注
覆盖
在继承关系中,覆盖是指通过在子类中重叠超类方法的处理,以改变处理结果。
在继承关系以外的情况下,这种现象不会发生,但在创建继承的子类时,请注意可能会意外地覆盖超类的一些内容,因为你可能对超类了解不够。
覆盖机制的原理
-
- 父类调用子类实例的方法
-
- 在子类中寻找该方法
- 如果存在该方法,则调用它。
换句话说,如果在子类中存在与超类同名的方法,则优先执行子类的方法。
换句话说,结果就像”方法的内容被累加”一样。
示例代码
这是继承自父类的超级类。
public class SuperOverride {
public void testOverride() {
System.out.println("オーバーライド前はこの表示が出ます");
}
}
这是一个继承了超类的子类。
// スーパークラスを継承します
public class SubOverride extends SuperOverride {
public void testOverride() {
//testOverrideメソッドをオーバーライドします。
System.out.println("オーバーライドされるとこの表示になります");
}
}
我們在這個班級中進行執行。
public class Main {
public static void main(String[] args) {
SubOverride subor = new SubOverride();
subor.testOverride();
}
}
运行结果
オーバーライドされるとこの表示になります
解释上述代码的话
通过在子类 SubOverride 中重写 testOverride 方法,输出结果被覆盖为重写的内容。
避免覆写的写法(示例)
如果要输出未被覆盖的内容,可以这样描述。
// スーパークラスを継承します
public class SubOverride extends SuperOverride {
public void testOverride() {
//testOverrideメソッドをオーバーライドします。
//スーパークラスのtestOverride メソッドの呼び出し
super.testOverride();
}
}
正如代码中所写,通过使用”super”关键字,调用testOverride()方法。通过这样做,将调用超类SuperOverride类的testOverride()方法。
Override的使用示例
在特定的子类中,有一个使用例,它修改或改变了该方法的处理内容。
我认为当你希望在不改动大本超类的情况下,仅将修正内容应用于子类时,覆写非常方便。
特别是在角色扮演游戏中,当角色执行特定的动作时,经常会使用覆盖。
所有角色都要覆盖并重写它们各自固有的“attack”方法。
-
- ナッシーは「ねむりごな」
-
- ルージュラは「あくまのキッス」
- ダグトリオは「じわれ」
以这种方式增加内容。
【Nassy.java】→ 【Nassy.java】纳西.java
public void attack() {
// ねむりごなの処理
}
【健太的.java】
public void attack() {
// はかいこうせんの処理を書く
}
【Dugtrio.java】 【地鼠三组.java】
public void attack() {
// じわれの処理を書く
}
我认为,只需编写不同的部分,就可以实现高效的代码,如上所述。