gpt4 book ai didi

java - Java 编程、覆盖和层次结构的良好实践

转载 作者:行者123 更新时间:2023-11-30 06:28:59 24 4
gpt4 key购买 nike

我有一个关于 Java 编程良好实践的问题。

问题是:

我正在重写在 B 类中声明的方法。该重写方法将在 C 类中。层次结构是 C 类扩展 B 扩展 A。该方法存在于每个类中,如下所示:

class A{
...
public void overrideMe(){ ... }
}
class B extends A{
public void overrideMe(){
...
...
super.overrideMe()
}
}

这些类对于每个项目都是通用的,并且项目很多,因此除非特殊情况,否则我无法修改此类。

我必须重写方法 overrideMe() 以在内部添加代码,但在方法的末尾我仍然需要调用 A 类的方法。

现在的问题是两个,更好:

1) 在类 B 中创建一个方法,该方法仅调用类 A 中的方法 overrideMe() 并扩展 overrideMe():

class B extends A{
public void callOverrideMeOfSuperClass(){ super.overrideMe(); }
public void overrideMe(){
...
...
super.overrideMe()
}
}
class C extends B{
public void overrideMe(){
...
super.callOverrideMeOfSuperClass()
}
}

2)在B类中创建一个自定义方法,该方法将包含在B类的overrideMe()中,并且仅针对我在C类中的项目进行扩展:

class B extends A{
public void customCode(){ (not code inside) }
public void overrideMe(){
...
customeCode();
...
super.overrideMe()
}
}
class C extends B{
public void customeCode(){
do something;
}
}

仅供引用:这些类 A 和 B 是更多方法和代码。

好的,我们必须给出以下问题的重要性:

1) 良好的java编程实践2)对代码影响较小3) 对所有项目的影响较小。这些项目是不同的项目,但共享共同的基础代码。4)如果我更改公共(public)代码,每个项目都会检查此代码以确保不会对项目产生影响。

第一个解决方案还是第二个更好,为什么?

谢谢大家!!

雨 clown

最佳答案

通常,期望派生类扩展的代码以您提供的第二种形式实现方法。此类方法通常命名为 doOriginalMethodName,因此在您的情况下为 doOverrideMe 。这确保了原始代码的执行以及派生代码的行为。

这是一些示例代码:

public class A {

public void extendMe() {
// modify internal state
...

// allow extension
doExtendMe();
}

protected void doExtendMe() {
}
}

public class B extends A {

@Override
protected void doExtendMe() {
// modify state of B
...
}
}

关于java - Java 编程、覆盖和层次结构的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com