Java:使用父类方法访问子类变量

杰安特:

我有以下情况:

public class A {

    private int x = 5;

    public void print()
    {
        System.out.println(x);
    }
}


public class B extends A {

    private int x = 10;

    /*public void print()
    {
        System.out.println(x);      
    }*/

    public static void main(String[] args) {
        B b = new B();
        b.print();
    }

}

执行代码时,输​​出为:5。

如何通过父类方法访问子类(B)的变量(x)?

是否可以在覆盖print()方法的情况下完成此操作(即在B中取消注释)?

[这很重要,因为在重写时,我们将不得不再次重写print()方法的整个代码]

已编辑

更多说明:-

  • 该问题的动机是使用其父类方法中的子类私有变量的值。这不需要更改父类私有变量的值即可获得所需的结果。
  • 不过,这里发布的答案使我找到了我想要的答案,下面已经发布了。

(感谢您的时间和帮助)

黄宗泽(Victor Wong):
class A {
    private int x = 5;

    protected int getX() {
        return x;
    }

    protected void setX(int x) {
        this.x = x;
    }

    public void print() {
        // getX() is used such that 
        // subclass overriding getX() can be reflected in print();
        System.out.println(getX());
    }
}

class B extends A {
    public B() {
        // setX(10);  // perhaps set the X to 10 in constructor or in main
    }

    public static void main(String[] args) {
        B b = new B();
        b.setX(10);
        b.print();
    }
}

已编辑

以下是使用抽象类和方法解决类似情况的一般答案:

abstract class SuperA {
    protected abstract Object getObj();

    public void print() {
        System.out.println(getObj());
    }
}

class A extends SuperA {
    @Override
    protected Object getObj() {
        // Your implementation
        return null; // return what you want
    }
}

class B extends A {
    @Override
    protected Object getObj() {
        // Your implementation
        return null; // return what you want
    }

    public static void main(String[] args) {
        B b = new B();
        b.print();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章