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中覆盖静态变量和成员变量?
发布于 2012-01-24 14:49:52
因为字段不支持多态性。MyClass.k
是9
(MyClass
指的是object
)。SampleThree.k
会给你90
的。每个类都有自己的一组变量。
发布于 2012-01-24 14:51:21
因为继承的目的是修改行为。行为是通过方法公开的,这些方法可以被重写。
你可以做的是重载一个字段,而不是重写。为此,您需要在接口外部定义该变量,以便为它们提供不同的值。
发布于 2012-01-24 15:02:45
在接口MyInterface
中有一个静态变量k
。你已经在MyClass
类中实现了这个接口,那么MyClass.k
应该是9。
对象由MyClass
引用。SampleThree.k
会给你90分
或者简单地说:
不能重写
静态变量。
覆盖静态和实例变量&方法的规则:
https://stackoverflow.com/questions/8983002
复制相似问题