嘿,我正在尝试使用构造函数接受大量变量,然后将相关信息传递给超类构造函数。
我得到的错误是当我使用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;
}
还有更多额外的构造函数,但我相信它们现在无关紧要。
答案 0 :(得分:7)
您收到错误的原因是因为以下变量在private
类中具有PropertySale
访问权限:
saleID
propertyAddress
reservePrice
除非超类声明AuctionSale
或protected
,否则您无法在子类public
中访问它们。但是,在这种情况下,没有必要:将这三个变量传递给super
构造函数,因此它们在基类中设置。派生类的构造函数中所需要的只是调用super
,然后处理派生类声明的变量,如下所示:
public AuctionSale(String saleID, String propertyAddress, int reservePrice, String highestBidder) {
super(saleID, propertyAddress, reservePrice);
this.highestBidder = "NO BIDS PLACED";
}
答案 1 :(得分: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";
}
如果要访问私有变量,最佳做法是在超类中编写getter
和setter
方法,并在任何地方使用它们。
答案 2 :(得分:2)
您已将超类中的变量标记为私有,这意味着它们不会被继承。将它们标记为public,default或protected,test.Private字段仅在类本身中可见。