我有像这样的抽象类和接口
abstract class ParentClass
{
int VALUE;
public abstract void display();
public void display2()
{
System.out.println("this is abstract class method");
}
}
interface parentInterface
{
int VALUE=88;
abstract void display();
void display2();
}
子类扩展并实现上述内容,如下所示
class ChildClass extends ParentClass implements parentInterface
{
ChildClass()
{
super.VALUE=0;
//VALUE=0; //<=will give ambiguous property
}
@Override
public void display()
{
System.out.println("Current Class-"+this.getClass());
System.out.println("Integer value-"+super.VALUE);
}
public void display2()
{
//to call the method of abstract class
//call by using super.display2();
System.out.println("this is implemented method");
}
}
所以,我的问题是如何在ChildClass中访问接口VALUE
变量?
答案 0 :(得分:2)
您可以使用VALUE
从界面访问parentInterface.VALUE
,因为界面中的变量为public static final
by default。
抽象类VALUE
可以使用this.VALUE
访问,因为它是一个成员变量。
答案 1 :(得分:2)
变量隐含public static final
。
static
- 因为Interface不能有任何实例。
final
- 分配给接口变量的值是一个真正的常量,不能由程序代码重新赋值。
可以使用<Interface>.VALUE
访问接口变量,而父类中的变量是继承的,因此可以使用this.VALUE
进行访问。
如果任何子类类正在实现具有实例的接口 成员以及子类和接口是否在同一个包中 然后可以从子类访问静态成员而不用 甚至使用接口名称。
这就是为什么你得到了模棱两可的错误。请将Interface放在其他一些软件包中,然后它不会出现这样的错误,否则你必须像super.VALUE