接口,lambda表达式与内部类

  • 接口
  • lambda表达式
  • 内部类
  • 服务加载器 (null)
  • 代理

接口:

使用关键字: interface (定义接口), implements (实现接口)

接口中的方法自动为public,写接口时不需要赋予public权限词

实现接口需要实现其全部方法
interface A;
class B implements A;

A a = new A();	//错误

A b;
b = new B();	//正确,可以声明接口变量,实例化为实现接口的对象
java是单继承,每个类只能有一个超类,但能实现很多接口

*使用 static ,private 关键词创造静态私有方法

使用 default 关键字创造默认方法,可以直接在接口中提供默认实现

public interface Comparable<T>{
    default int compareTo(T other){ return 0; }
}
默认方法冲突:
  1. 超类优先:如果超类提供了一个具体方法,同名且有相同参数的默认方法会被忽略
  2. 接口冲突:两个接口提供了同名同参的方法时,必须覆盖这个方法依解决问题(声明实现其中一个)

*lambda表达式:

目的: 方便的传递代码块

// 有参数lambda表达式
(String first, String second) ->
{
    if(first.length() < second.length()) return -1;
    else if(first.length() > second.length) return 1;
    else return 0;
}
// 无参数lambda表达式
() ->
{
    for(int i=0; i<100; i++)
        System.out.println(i);
}
//方法引用 (::)
...
//构造器引用 (new)
Comparing比较器

*内部类:

内部类是定义在另一个类中的类,可以简洁的回调:

  1. 内部类对同一个包中的其他类隐藏
  2. 内部类方法可以访问定义这个类的作用域中的数据,包括原有的私有数据
外围类引用:OuterClass.this
局部内部类:

不仅在类中,同时在局部(方法)中定义类,被称为局部内部类

匿名内部类:

直接new对象并给定义(属性方法)不用设类名

静态内部类:

将内部类声明为static就不会产生引用

服务加载器:

null

代理:

代理类包含以下方法:

  • 指定接口所需要的全部方法
  • Object类中的全部方法,如toString,equals等

创建代理对象需要使用 Proxy 类的newProxyInstance方法,对应的三个参数为:

  • 一个类加载器 (class loader)
  • 一个Class对象数组
  • 一个调用处理器