sthor69
sthor69

Reputation: 668

Java - non static member variable of an interface

I know that it is not recommended, but why can I declare a member variable of an interface not static?

And what is the difference between a static and a not static member of an interface? I see that if I define an interface member variable as static, I can use it in the implementing class in a not-static way:

Interface:

public interface Pinuz {
    final static int a;

    public void method1();
}

Implementing class:

public class Test implements Pinuz {
    public static void main(String[] args) {

        Test t = new Test();
        int b = t.a;
    }

    @Override
    public void method1() {
        // TODO Auto-generated method stub

    }
}

I see only a warning asking me to use the member a in a static way.

Upvotes: 7

Views: 6648

Answers (3)

vlence
vlence

Reputation: 495

All member variables of an interface, whether you declare them to be static or not, are static

Upvotes: 1

Konstantin Yovkov
Konstantin Yovkov

Reputation: 62874

Why can I declare a member variable of an interface not static?

It is implicitly static (and final) (which means it is static even if you omit the static keyword), as stated in the JLS:

Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

The reason for being final is that any implementation could change the value of member, if it's not defined as final. Then the member would be a part of the implementation, but as you know an interface is a pure abstraction.

The reason for being static is that the member belongs to the interface, and not an implementation instance.

Also, being static, you should just refer it with the class-name (otherwise you'd get a compiler warning), not through some reference, so int b = t.a; should be just written as int b = Test.a;

Upvotes: 11

Dinil
Dinil

Reputation: 66

You cannot declare a non static variable in Java interface. Every variable in interface are implicitly public, static, and final.

Upvotes: 1

Related Questions