java - 使用字段或重写方法来定义抽象类的值

标签 java

设置父类的值时,哪种方式更可取:

设置字段

public abstract class Weapon {
    final Integer damage;
}
public class Knive extends Weapon {
    public Knive(){
        damage = 100;
    }
}

重写一个方法

public abstract class Weapon {
    public abstract int getDamage();
}
public class Knive extends Weapon {
    @Override
    public int getDamage(){
        return 100;
    }
}

还是只是个人喜好?

最佳答案

我认为这要视情况而定。两个例子都是正确的。

当你有继承时,你的第一个方法更可取,并且是子类数量的一般逻辑。 但是,一定要让您的属性(property)受到保护

第二种方法,更适合你使用轻型类,比如没有默认实现的策略。在这种情况下,您可以将父类更改为 interface

public abstract class Weapon {
    protected final Integer damage;

    protected Weapon(Integer damage) {
        this.damage = damage;
    }

    // more logic here
}

public class Knive extends Weapon {
    public Knive(){
        super(100);
    }
}

public interface Weapon {
    Integer getDamage();
}

public class Knive implements Weapon {
    // light-weight strategy

    public Integer getDamage() {
        return 100;
    }
}

关于java - 使用字段或重写方法来定义抽象类的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51893319/

相关文章:

java - 从通过代理路由的请求中获取 IP 和主机名

java - 错误 :(17, 21) 错误 : no suitable method found for add(int, ExampleItemFragment)

java - 比较器不适用于二叉树

网络作业作业中的 Java.lang.OutOfMemoryError

java - 静态变量未初始化时抛出异常

java - 如何使用java代码找到SQL脚本完全执行所需的时间?

java - Android、ndk、任意写入sd卡文件

java - 对于参数类型 java.lang.Double、java.lang.Double ,运算符 + 未定义

java - 使用 AppEngine 进行日志记录不起作用(无论是在 IDE 中还是部署中)

java - Java的浮点实现是否还有Kahan发现的问题?