在接口和抽象类-Java中访问具有相同名称的值

时间:2013-01-02 06:52:34

标签: java interface abstract-class parent-child

我有像这样的抽象类和接口

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变量?

2 个答案:

答案 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

那样访问它