繁体   English   中英

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

[英]Good practice to programming in Java, override and hierarchy

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

问题是:

我确实覆盖了一个在 B 类中声明的方法。这个覆盖的方法将在 C 类中。层次结构是 C 类扩展了扩展 A 的 B。该方法存在于每个类中,如下所示:

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)如果我更改公共代码,每个项目都要检查此代码以确保对项目没有影响。

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

谢谢大家!!

雨小丑

通常需要派生类扩展的代码以您提供的第二种形式实现方法。 这些方法通常被命名为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
    ...
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM