Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why you cannot declare member interfaces in a local class?

You cannot declare an interface inside a block like below

public void greetInEnglish() {

        interface HelloThere {
           public void greet();
        }

        class EnglishHelloThere implements HelloThere {
            public void greet() {
                System.out.println("Hello " + name);
            }
        }

        HelloThere myGreeting = new EnglishHelloThere();
        myGreeting.greet();
}

In This Oracle tutorial I got "You cannot declare member interfaces in a local class." because "interfaces are inherently static."

I am eagar to understand this with more rational information, why and how interface are inherently static?

and why above code does not make sense?

Thanks in advance to elloborate!

like image 290
Kevan Avatar asked Oct 31 '22 10:10

Kevan


1 Answers

I am eagar to understand this with more rational information, why and how interface are inherently static?

because interfaces are implicitly static, and you can't have non-final statics in an inner class.

Why are they implicitly static?

because that's the way they designed it.

and why above code does not make sense?

because of the above reason ,

Now lets make it simple :

What static means - "not related to a particular instance". So, suppose, a static field of class Foo is a field that does not belong to any Foo instance, but rather belongs to the Foo class itself.

Now think about what an interface is - it's a contract, a list of methods that classes which implement it promise to provide. Another way of thinking about this is that an interface is a set of methods that is "not related to a particular class" - any class can implement it, as long as it provides those methods.

So, if an interface is not related to any particular class, clearly one could not be related to an instance of a class - right?

I also suggest you to study Why static can't be local in Java?

like image 101
Neeraj Jain Avatar answered Nov 08 '22 07:11

Neeraj Jain