0

Greeter.java

package lambda;
import java.util.stream.*;

public class Greeter {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Greeting Greet1 = () -> System.out.println("Hello gretting..");

        Greeting innerclass = new Greeting() {
            //why new Greeting is an interface ?
            public void perform(){
                System.out.println("Hello inner greeting");
            }
        };
        Greet1.perform();
        innerclass.perform();
    }
}

Greeting.java

package lambda;

public interface Greeting {

    public void perform();

}

OUTPUT

Hello gretting..

Hello inner greeting...

why this line is working?

Greeting innerclass = new Greeting() {
Thomas Fritsch
  • 9,639
  • 33
  • 37
  • 49
Prashant Singh
  • 113
  • 2
  • 2
  • 9
  • 3
    Please read about anonymous classes in java. This may help: https://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java – ernest_k Oct 09 '18 at 14:20
  • It's also worth noting that lambda expressions in Java are effectively just a cleaner syntax for an single-method anonymous inner class - `Greet1` and `innerclass` are functionally identical. – Joe Clay Oct 09 '18 at 14:25

1 Answers1

0

Because Greeting innerclass = new Greeting() ... creates an anonymous inner class that implements the Greeting inteface.

Have a look at https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

David Soroko
  • 8,521
  • 2
  • 39
  • 51