将参数传递给超类

时间:2013-06-01 03:03:57

标签: java

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

我得到的错误是当我使用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";
}

正如你所看到的,我已经调用了超类属性来获取变量。

超类 -

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;
}

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

3 个答案:

答案 0 :(得分:7)

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

saleID
propertyAddress
reservePrice

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

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

答案 1 :(得分:4)

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

以任何方式将类的变量传递给自己的构造函数有什么用?

您的saleIDpropertyAddressreservePrice都是超类中的私有变量。这限制了使用。

然而,您通过超类的构造函数设置变量,因此您不必自己设置....

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方法,并在任何地方使用它们。

答案 2 :(得分:2)

您已将超类中的变量标记为私有,这意味着它们不会被继承。将它们标记为public,default或protected,test.Private字段仅在类本身中可见。