在Java中实例化超类变量

时间:2018-01-26 23:02:05

标签: java class inheritance

我有一个抽象类,其中包含一个变量' name'我希望我的子类初始化。其中哪一个是最好的方法。

选项1.使用超类构造函数进行初始化

    @Getter
    abstract class A {

      private final String name;

      protected A(String name) {
        this.name = name;
      }

    }

    class B extends A {

      private static final NAME = "Raylan";
      private final int age;

      public B(int age) {
        super(NAME);
        this.age = age;
      }

    }

选项2.使用getter方法。

    abstract class A {

      private final String name;

      public abstract String getName();

    }

    class B extends A {

      private static final NAME = "Raylan";
      private final int age;

      public B(int age) {
        this.age = age;
      }

      @Override
      public String getName() {
        return NAME;
      }

    }

1 个答案:

答案 0 :(得分:0)

name中拥有私有A而无法访问它是没用的。假设getName()中有一个功能齐全的A,请考虑B中的多个构造函数:

class B extends A {
  private static final String NAME = "Raylan";
  private final int age;

  public B(String name, int age) {
    super(name);
    this.age = age;
  }

  public B(int age) {
    this(NAME, age);
  }

  public int getAge() {
     return age;
  }

}

这允许重复使用A,否则B扩展A似乎没什么意义。组合而不是继承可能是另一种选择。