gpt4 book ai didi

java - 在父类(super class)型中设置变量的正确方法

转载 作者:行者123 更新时间:2023-12-01 12:25:36 25 4
gpt4 key购买 nike

我有一个抽象类Compartment,其中包含变量label tariff totalSeatsseatsAvailable 如下图。我通过从子类 FirstClassCompartment 的构造函数调用 super() 来设置这些变量。我对我的代码有几个问题。

首先,这是使用父类(super class)构造函数设置变量的正确方法吗?或者我应该在父类(super class)中创建一个 setter 方法来设置这些变量。

其次,直接访问父类(super class)的变量而不使用 getter/setter 方法是否是不好的编码?

最后,父类(super class)中变量 seatsAvailable 的值取决于子类中变量 seatsReserved,如下所示 seatsAvailable = totalSeats - SeatsReserved。这可能会导致将来的代码维护或灵 active 问题吗?

public abstract class Compartment {

protected final char label;
protected final double tariff;
protected final int totalSeats;
protected int seatsAvailable;

public Compartment(char label, double tariff, int totalSeats) {
this.label = label;
this.tariff = tariff;
this.totalSeats = totalSeats;
}

public char getLabel() {
return label;
}

public int getTotalSeats() {
return totalSeats;
}

public void setSeatsAvailableLessByOne() {
seatsAvailable--;
}

public abstract int getSeatsAvailable();

public abstract double getTariff();

}


public class FirstClassCompartment extends Compartment {

protected final int seatsReserved;

public FirstClassCompartment(char label, double tariff, int totalSeats, int seatsReserved) {
super(label, tariff, totalSeats);
this.seatsReserved = seatsReserved;
seatsAvailable = totalSeats - seatsReserved;
}

@Override
public double getTariff() {
return tariff + tariff * .13;
}

@Override
public int getSeatsAvailable() {
return seatsAvailable;
}
}

最佳答案

第一个问题:这绝对是正确的做法。调用父类(super class)构造函数,并传递相关参数。

第二个问题:这在一定程度上是一种风格问题。最好不要让这些字段直接可供所有人使用,因此您不希望它们成为公共(public)的,但让它们可供您自己的子类使用并不是灾难性的。不过,通过 getter 和 setter 使它们可用是相当合理的,当然,如果您希望子类可以读取但不可写的字段,那么 getter 会是合适的。

第三个问题:这里没有问题。父类(super class)是抽象的,因此您希望子类实现能够填补一些空白。但由于 seatsAvailable 逻辑非常简单(减法),您可能会考虑完全删除 seatsAvailable 字段,而只需要

@Override
public int getSeatsAvailable() {
return totalSeats - seatsReserved;
}

这样,它将即时计算,您不必担心该字段与其他字段保持同步。

关于java - 在父类(super class)型中设置变量的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364243/

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