首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在main中覆盖实例变量/方法?

如何在main中覆盖实例变量/方法?
EN

Stack Overflow用户
提问于 2013-04-29 07:30:54
回答 6查看 119关注 0票数 3

我想访问超类中的实例变量x。我找不到它的语法。这有可能吗?

代码语言:javascript
复制
public class SuperBoss {
    int x = 10;
}

public class Boss extends SuperBoss {
    int x = 2;

public static void main ( String[] args ) {
    Boss b = new Boss();
    System.out.println(b.x); //prints out 2, I want it to print out 10 
}

我一直在尝试使用关键字"super“,但没有成功。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-04-29 07:47:12

是的,有一种方法。字段具有编译时绑定。您需要的是对SuperBoss进行强制转换:

代码语言:javascript
复制
public class SuperBoss {
    int x = 10;
}

public class Boss extends SuperBoss {
    int x = 2;

    public static void main ( String[] args ) {
        Boss b = new Boss();
        System.out.println(((SuperBoss)b).x);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-29 07:32:22

它打印出2,因为您在Boss中的int x = 2声明隐藏了SuperBoss中的x声明

通常,您可以使用super关键字显式地访问超类的public字段,但是这在static方法的static上下文中不起作用。您可以定义一个小帮助器函数来获取超类的x的值

代码语言:javascript
复制
public class Boss extends SuperBoss {
    int x = 2;

    public int getSuperX() {
        return super.x;
    }

    public static void main ( String[] args ) {
       Boss b = new Boss();
       System.out.println(b.getSuperX()); //prints out 2, I want it to print out 10 
    }
}
票数 4
EN

Stack Overflow用户

发布于 2013-04-29 07:39:11

据我所知(我可能应该在JLS中查找详细信息),使用super访问阴影的非私有字段是合法的,但只能从实例方法中访问。所以你可以这样做:

代码语言:javascript
复制
public class Boss extends SuperBoss {

    int x = 2;

    int getSuperX() {
        return super.x;
    }

    public static void main (String[] args) {
        Boss b = new Boss();
        System.out.println(b.getSuperX());
    }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16269163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档