外部类、静态内部类、内部类、局部内部类、匿名内部类、lambda表达式实现接口

162 阅读1分钟

外部类、静态内部类、内部类、局部内部类、匿名内部类、lambda表达式实现接口

实现接口的方式:

接口定义

interface Person {
    public void say();
}

外部类

//外部类
class Student1 implements Person {

    public void say() {
        System.out.println("外部类");
    }
}

其他

public class classTest {

    //内部类
    class Student2 implements Person {

        public void say() {
            System.out.println("内部类");
        }
    }

    //静态内部类
    static class Student3 implements Person {

        public void say() {
            System.out.println("静态内部类");
        }
    }

    public static void main(String[] args) {
        //局部内部类
        class Student3 implements Person {
            public void say() {
                System.out.println("局部内部类");
            }
        }

        //匿名内部类
        Person p1 = new Person(){
            public void say() {
                System.out.println("匿名内部类");
            }
        };

        //lambda表达式  适用于函数式接口
        Person p2 =() -> System.out.println("lambda表达式");
    }
}

其实大同小异,只不过发现越来越洁。


Lambda表达式

这个首先得配一下idea支持 lambda8

首先想要使用Lambda表达式实现接口,该接口必须为一个函数式接口,即该接口只有一个待实现的抽象方法。
如下:接口可定义非抽象方法。

@FunctionalInterface
interface Person {
    static int a = 1;

    public void say();

    public static void add() {
        System.out.println(1);
    }
    public default int get() {
        return a;
    }
}

我们这个say方法还是很简单的,没有参数。如果有参数怎么写?

@FunctionalInterface
interface Person2 {
    public void say(String str);
}
class tt{
    public static void main(String[] args) {
        Person2 person2 = (str) -> System.out.println(str);
        person2.say("参数");
    }
}
  • 前面括号内就是形参
  • 如果方法体只有一行代码可省略大括号,和if一样