加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:31:02 所属栏目: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
我有以下情况:
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()方法的整个代码)

EDITED

更多澄清:

>问题的动机是从父类方法中使用子类私有变量的值.这不需要更改父类私有变量的值才能实现所需的结果.
>然而,这里发布的答案使我得到了我所期望的答案,我已经在下面发贴了.

(感谢所有的时间和帮助)

解决方法

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();
    }
}

EDITED

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

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();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读