首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何重写变量

如何重写变量
EN

Stack Overflow用户
提问于 2012-01-24 14:48:08
回答 5查看 2.5K关注 0票数 1
代码语言:javascript
运行
复制
package com.mycompany.myproject.mypkg;

interface MyInterface {
    public static final int k = 9;
}

class MyClass implements MyInterface {
    // int k = 89;
}

public class SampleThree extends MyClass {
    static int k = 90;

    public static void main(String args[]) {
        MyClass object = new SampleThree();
        System.out.println(object.k);
    }
}

为什么上面的程序打印'9‘而不是'90'?

如何在Java中覆盖静态变量和成员变量?

EN

回答 5

Stack Overflow用户

发布于 2012-01-24 14:49:52

因为字段不支持多态性。MyClass.k9 (MyClass指的是object )。SampleThree.k会给你90的。每个类都有自己的一组变量。

票数 5
EN

Stack Overflow用户

发布于 2012-01-24 14:51:21

因为继承的目的是修改行为。行为是通过方法公开的,这些方法可以被重写。

你可以做的是重载一个字段,而不是重写。为此,您需要在接口外部定义该变量,以便为它们提供不同的值。

票数 1
EN

Stack Overflow用户

发布于 2012-01-24 15:02:45

在接口MyInterface中有一个静态变量k。你已经在MyClass类中实现了这个接口,那么MyClass.k应该是9。

对象由MyClass引用。SampleThree.k会给你90分

或者简单地说:

不能重写

静态变量。

覆盖静态和实例变量&方法的规则:

  1. 如果实例方法重写静态方法,则会发生编译错误。
  2. 如果静态方法隐藏了实例方法,则会发生编译错误。
  3. 允许静态变量隐藏实例variable.
  4. It's也允许实例变量隐藏静态变量。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8983002

复制
相关文章

相似问题

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