5

嘿家伙,我正在尝试使用构造函数来接受大量变量,然后将相关信息传递给超类构造函数。

我得到的错误是,当我使用 this.variable 时,它​​告诉我在类中创建该变量,但我认为调用 super 将允许我以这种方式使用它。

public class AuctionSale extends PropertySale {

private String highestBidder;   
public AuctionSale(String saleID, String propertyAddress, int reservePrice, String    highestBidder) {
    super(saleID, propertyAddress, reservePrice);
    this.saleID = saleID;
    this.propertyAddress = propertyAddress;
    this.reservePrice = reservePrice;
    this.highestBidder = "NO BIDS PLACED";
}

如您所见,我调用了超类propertiesale 来获取变量。

超类——

public class PropertySale {
// Instance Variables
private String saleID;
private String propertyAddress;
private int reservePrice;
private int currentOffer;
private boolean saleStatus = true;

public PropertySale(String saleID, String propertyAddress, int reservePrice) {
    this.saleID = saleID;
    this.propertyAddress = propertyAddress;
    this.reservePrice = reservePrice;
}

还有更多额外的构造函数,但我相信它们现在无关紧要。

4

3 回答 3

7

您收到错误的原因是因为以下变量private在类中具有访问权限PropertySale

saleID
propertyAddress
reservePrice

AuctionSale除非超类声明它们protectedpublic. 但是,在这种情况下没有必要:您将这三个变量传递给super构造函数,因此它们会在基类中设置。在派生类的构造函数中只需要调用super,然后处理派生类声明的变量,如下所示:

public AuctionSale(String saleID, String propertyAddress, int reservePrice, String    highestBidder) {
    super(saleID, propertyAddress, reservePrice);
    this.highestBidder = "NO BIDS PLACED";
}
于 2013-06-01T03:08:41.373 回答
4

私有变量只能在声明它们的类中访问,不能在其他地方访问。可以在子类中访问受保护或公共变量。

无论如何,将类的变量传递给它自己的构造函数有什么用?

您的saleID, propertyAddress,reservePrice都是超类中的私有变量。这限制了使用。

但是,您正在通过超类的构造函数设置变量,因此您不必自己设置它......

public class AuctionSale extends PropertySale {

private String highestBidder;   
public AuctionSale(String saleID, String propertyAddress, int reservePrice, String    highestBidder) {
    super(saleID, propertyAddress, reservePrice);//This should be sufficient
    //this.saleID = saleID;
    //this.propertyAddress = propertyAddress;
    //this.reservePrice = reservePrice;
    this.highestBidder = "NO BIDS PLACED";
}    

如果你想访问私有变量,最好的做法是在超类中编写gettersetter方法并在任何你想要的地方使用它们。

于 2013-06-01T03:12:26.793 回答
2

您已将超类中的变量标记为私有,这意味着它们不会被继承。将它们标记为公共、默认或受保护和测试。私有字段仅在类本身中可见。

于 2013-06-01T03:11:49.200 回答