gpt4 book ai didi

java - 覆盖非抽象方法是好的做法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:52 26 4
gpt4 key购买 nike

我有一种情况需要修改父类(super class)方法以具有子类特定的逻辑,但方法逻辑对于所有其他子类都是相同的。

我有两个选择:

1) 使方法抽象化,并为除我关注的子类之外的每个方法重复相同的代码。

2) 在我想要更改逻辑的相关子类中重写非抽象方法。

在 Java 中覆盖非抽象方法是一种好的做法吗?以及在概念上 b/w 覆盖非抽象方法与抽象方法的区别是什么。

最佳答案

在某种程度上,这是一种风格问题。

这是一种常见的做法 - 但也有人告诉您任何方法都不应有多个实现。这些人声称继承层次结构中的多个实现会导致难以调试的代码——因为您必须非常小心地确定实际调用此类方法的哪个版本。

当这些方法被其他方法大量使用时,您很容易失去全局 - 突然之间预测某些代码正在做什么变得复杂 - 因为在某些子类中有大量重写。

要理解的关键:X 类中某些方法foo() 的“单个”@Override 很好,而且很常见,是很好的做法。但是在 X 的子类中重写相同的 foo() 再次 - 这会很快导致各种问题。

换句话说:重新实现非抽象方法应该小心。如果它使您的代码更难理解,请寻找其他解决方案。比如:基类有一个固定的(最终的)方法来做事——这个方法调用其他抽象方法来完成它的工作。示例:

public abstract class Base {
public final int doSomething() {
String tmp = foo();
int result = bar(tmp);
return result * result;
}
public abstract String foo();
public abstract int bar(String str);

如所写:在这里您可以看到实现是“固定的”,因为doSomething()是最终的——但是可以(必须)覆盖所需的“成分”在每个子类中。

关于java - 覆盖非抽象方法是好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124801/

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