当一个类从一个抽象类扩展然后如何访问它的私有变量?

时间:2014-11-15 14:58:19

标签: java constructor abstract-class

我有一个抽象类A,而类B从它扩展。我将这些变量设为私有且很好。

public abstract class A  {
    private String name;
    private String location;

public A(String name,String location) {
        this.name = name;
        this.location = location;
}
 public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }


    public String getLocation() {
        return location;
    }

然后我想写B班。

public class B extends A{
private int fee;
private int goals;   // something unique to class B

我不明白如何为B类编写构造函数来访问它的私有变量。    我写了类似这样的错误。

    B(int fee, int goals){
       this.fee= fee;
       this.goals=goals;
     }

你可以帮我解释一下这个简短的解释。

2 个答案:

答案 0 :(得分:5)

上述情况应该没问题,除非你必须指定对A的构造函数的调用,因为通过构建B,你构建一个A

e.g

public B(int fee, int goals) {
    super(someName, someLocation); // this is calling A's constructor
    this.fee= fee;
    this.goals=goals;
}

在上面你不得不确定如何构建A。您为A指定了哪些值?您通常会将其传递给B的构造函数。

public B(int fee, int goals, String name, String location) {
    super(name, location);
    this.fee= fee;
    this.goals=goals;
}

答案 1 :(得分:1)

您没有类A的默认构造函数。这意味着您必须从A构造函数指定对B构造函数的调用。

public B(String name, String location int fee, int goals) {
    super(name, location); // this line call the superclass constructor
    this.fee = fee;
    this.goals = goals;
}

如果一个类继承了另一个类,那么在构造子类时,也会对母类构造函数进行隐式调用。 由于您的A没有默认构造函数,这意味着您要使用特定的构造函数,因此必须明确调用它。