JAVA覆盖继承的变量名

时间:2018-04-18 19:19:28

标签: java inheritance override

我想知道从超类中扩展时是否可以覆盖变量的NAME(而不是值)。

想象一下这种情况:

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}
public class Sub1 extends Base {
   public String A1;
   public void setA1(String A1) { this.A1 = A1; }
}
public class Sub2 extends Base {
   public String A2;
}

Sub1 s = new Sub1();
s.setA1("1")
s.doSomething() // print "1"

我很好奇,不管怎样,我可以让变量A与变量A1和A2相同,只是为了让我的子类中的代码更加可读。

提前致谢

1 个答案:

答案 0 :(得分:0)

是的,您可以“覆盖”A中的字段Base。这种方式Sub1Sub2类将拥有A字段名称(但它将是不同的字段,具有不同的(来自Base)值。)

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}
public class Sub1 extends Base {
   public String A;
   public void setA(String A) { this.A = A; }
}
public class Sub2 extends Base {
   public String A;
}

Sub1 s = new Sub1();
s.setA("1")
s.doSomething() // print "null", because original field has not been changed

或者您可以在ASub1类中重复使用Sub2字段:

public class Base {
   public  String A;
   public  String doSomething() { print(A) ; }
}
public class Sub1 extends Base {
   // removed: public String A1;
   public void setA(String A) { this.A = A; }
}
public class Sub2 extends Base {
   // removed: public String A2;
}

Sub1 s = new Sub1();
s.setA("1")
s.doSomething() // print "1"