Java 中通过覆盖一种方法扩展抽象 class 的最佳实践
Best practice in Java for extending abstract class with overriding one method
我有一个接口 I1
,一个实现 I1
的抽象 Class A1
和许多 Classes C1
。 ..n
扩展 A1
.
现在,一个 class C3
正在为 I1
的方法 methodA
实现一种特殊行为,其中每隔一个扩展 Class A1
正在实现一种默认行为。
public interface I1 {
public void methodA();
}
public abstract class A1 implements I1 {
public void methodA(){
//default behaviour
}
//other methods
}
public class C1 extends A1 {
//do nothing regarding methodA, because the default behaviour is desired
//other methods
}
public class C2 extends A1 {
//do nothing regarding methodA, because the default behaviour is desired
//other methods
}
public class C3 extends A1 {
public void methodA(){
//special behaviour
}
//other methods
}
现在,对我来说,这似乎不是最佳解决方案,因为很难发现 C3
正在覆盖其父级的某些方法。有这方面的最佳实践吗?
我会将 A1
中的所有常用方法移动到另一个抽象级别(我们称之为 ABase
),并在 A1
和 A2
中声明它们的特殊行为(如果有的话)。
这样,如果添加更多与 C3
相同类型的 类,则无需重新定义 methodA
。
public interface I1 {
public void methodA();
}
public abstract class ABase implements I1 {
//other methods
}
public abstract class A1 extends ABase {
public void methodA(){
//default behaviour
}
}
public abstract class A2 extends ABase {
public void methodA(){
//default behaviour
}
}
public class C1 extends A1 {
//do nothing regarding methodA, because the default behaviour in A1 is desired
//other methods
}
public class C2 extends A1 {
//do nothing regarding methodA, because the default behaviour in A1 is desired
//other methods
}
public class C3 extends A2 {
//do nothing regarding methodA, because the default behaviour in A2 is desired
//other methods
}
我有一个接口 I1
,一个实现 I1
的抽象 Class A1
和许多 Classes C1
。 ..n
扩展 A1
.
现在,一个 class C3
正在为 I1
的方法 methodA
实现一种特殊行为,其中每隔一个扩展 Class A1
正在实现一种默认行为。
public interface I1 {
public void methodA();
}
public abstract class A1 implements I1 {
public void methodA(){
//default behaviour
}
//other methods
}
public class C1 extends A1 {
//do nothing regarding methodA, because the default behaviour is desired
//other methods
}
public class C2 extends A1 {
//do nothing regarding methodA, because the default behaviour is desired
//other methods
}
public class C3 extends A1 {
public void methodA(){
//special behaviour
}
//other methods
}
现在,对我来说,这似乎不是最佳解决方案,因为很难发现 C3
正在覆盖其父级的某些方法。有这方面的最佳实践吗?
我会将 A1
中的所有常用方法移动到另一个抽象级别(我们称之为 ABase
),并在 A1
和 A2
中声明它们的特殊行为(如果有的话)。
这样,如果添加更多与 C3
相同类型的 类,则无需重新定义 methodA
。
public interface I1 {
public void methodA();
}
public abstract class ABase implements I1 {
//other methods
}
public abstract class A1 extends ABase {
public void methodA(){
//default behaviour
}
}
public abstract class A2 extends ABase {
public void methodA(){
//default behaviour
}
}
public class C1 extends A1 {
//do nothing regarding methodA, because the default behaviour in A1 is desired
//other methods
}
public class C2 extends A1 {
//do nothing regarding methodA, because the default behaviour in A1 is desired
//other methods
}
public class C3 extends A2 {
//do nothing regarding methodA, because the default behaviour in A2 is desired
//other methods
}