Can we create an instance of an interface in Java?

JavaInterfaceInstanceInner ClassesAnonymous Class

Java Problem Overview


Is it possible to create an instance of an interface in Java?

Somewhere I have read that using inner anonymous class we can do it as shown below:

interface Test {
    public void wish();
}

class Main {
    public static void main(String[] args) {
        Test t = new Test() {
            public void wish() {
                System.out.println("output: hello how r u");
            }
        };
        t.wish();
    }
}
cmd> javac Main.java
cmd> java Main
output: hello how r u

Is it correct here?

Java Solutions


Solution 1 - Java

You can never instantiate an interface in java. You can, however, refer to an object that implements an interface by the type of the interface. For example,

public interface A
{
}
public class B implements A
{
}

public static void main(String[] args)
{
    A test = new B();
    //A test = new A(); // wont compile
}

What you did above was create an Anonymous class that implements the interface. You are creating an Anonymous object, not an object of type interface Test.

Solution 2 - Java

Yes, your example is correct. Anonymous classes can implement interfaces, and that's the only time I can think of that you'll see a class implementing an interface without the "implements" keyword. Check out another code sample right here:

interface ProgrammerInterview {
    public void read();
}

class Website {
    ProgrammerInterview p = new ProgrammerInterview() {
        public void read() {
            System.out.println("interface ProgrammerInterview class implementer");
        }
    };
}

This works fine. Was taken from this page:

http://www.programmerinterview.com/index.php/java-questions/anonymous-class-interface/

Solution 3 - Java

Normaly, you can create a reference for an interface. But you cant create an instance for interface.

Solution 4 - Java

Short answer...yes. You can use an anonymous class when you initialize a variable. Take a look at this question: <https://stackoverflow.com/q/714602>

Solution 5 - Java

No in my opinion , you can create a reference variable of an interface but you can not create an instance of an interface just like an abstract class.

Solution 6 - Java

Yes it is correct. you can do it with an inner class.

Solution 7 - Java

Yes we can, "Anonymous classes enable you to make your code more concise. They enable you to declare and instantiate a class at the same time. They are like local classes except that they do not have a name"->>Java Doc

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNinjaView Question on Stackoverflow
Solution 1 - JavaChad La GuardiaView Answer on Stackoverflow
Solution 2 - JavaMagnusView Answer on Stackoverflow
Solution 3 - JavaMoohView Answer on Stackoverflow
Solution 4 - JavaLiviu T.View Answer on Stackoverflow
Solution 5 - JavaKetan GView Answer on Stackoverflow
Solution 6 - Javazinan.yumakView Answer on Stackoverflow
Solution 7 - JavaVeerendraView Answer on Stackoverflow