一、接口
1.1..8之前
1)接口中的变量都是静态常量,必须显示初始化
2)接口中的所有方法默认都是public abstract,方法不能有方法体。
3)接口中没有构造方法,不可以被实例化,可以被实现
4)实现类必须实现接口的所有方法
5)实现类可以实现多个接口
2.1.8之后
1)default:
接口里可以用default关键字修饰默认方法,方法可以有方法体。
一个类实现接口后,不必重写接口里的默认方法
默认方法可以被继承,类的实例对象可以直接调用接口中的默认方法
如果一个类实现了多个接口,多个接口中都定义了一个相同方法名的默认方法,实现类需要重写接口中的默认方法。
可以在实现类中使用接口名.super.方法名调用不同接口中的相同默认方法
如果一个类继承了一个抽象类,实现了一个接口,抽象类和接口中存在相同的方法,采取类优先的原则,优先继承抽象类中的方法
2)static:
接口中可以声明静态方法,可以为静态方法提供实现。接口中的静态方法必须是public的,public修饰符可以省略,静态方法不能被继承和覆盖,只能在其所在的接口被调用
二、内部类
1.成员内部类
2.局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
3.私有内部类
外部类可以访问,其他的类不可以访问它的私有内部类
4.静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象
2.匿名内部类
1) 匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
2)lambda表达式:函数式接口,()->{},一个参数可以省略小括号,一行方法体大括号可以省略