java内部类
-
有名内部类
-
匿名内部类
-
普通类
-
抽象类
-
接口
-
-
静态内部类
- 静态有名内部类
- 静态匿名内部类
-
Lambda表达式(静态内部类)
- 有返回值
- 无返回值
内部类是指在一个外部类内定义的类。
根据是否有类名分为有名内部类和匿名内部类
有名内部类:
有名内部类就是在一个类中创建一个有名字的内部类,可以访问外部类的属性和方法(即使是private),此内部类的创建依托于外部类的对象,即在创建时必须给定一个具体的外部类对象,由此,该内部类能够访问对应外部类对象的属性或方法,也即,若未创建外部类对象,一定无法创建此内部类。
匿名内部类:
匿名内部类由于没有类名而不能单独存在,定义匿名内部类的同时必须直接实例化该类。
语法格式:
new 父类构造器([参数列表])|接口(){
//内部类内容
}
创建对象形式:
Father father = new Father(){
//内部类内容
}
这种形式相当于将对象上转型存在父类中,与正常语法一样,调用时无法使用新增的方法或属性,可以使用子类重写的方法。
new Father(){
//内部类内容
}.do();
这种形式相当于在创建对象时直接对对象进行调用且只能进行一次调用,可以使用新增的方法或属性,可以使用子类重写的方法。
匿名内部类大致分为三种形式:
1.普通类匿名内部类
普通类匿名内部类实质为另一个普通类的子类
2.抽象类匿名内部类
抽象类匿名内部类实质为另一个抽象类的子类
3.接口匿名内部类
接口匿名内部类实质为另一个接口的实现类
静态内部类:
特点:
- 静态内部类是在外部类加载时加载,不能使用外部类非静态属性或方法
- 静态内部类对象的创建与外部类的对象并无联系,并没有通过指针将每一个内部类对象链接到外部类对象上,因此与非静态内部类差别较大
静态内部类分为静态有名内部类和静态匿名内部类两种
1.静态有名内部类
静态有名内部类可以直接创建对象,也可以通过外部类创建对象
2.静态匿名内部类
静态匿名内部类可以直接通过外部类创建引用,因为它在创建类的同时已经创建了一个对象,这个对象并不是每个外部类的对象,而是独一无二,只属于类私有
Lambda表达式:
Java支持Lambda 表达式始于Java 8,它的出现简化了函数式接口匿名内部类的语法。
表达式语法:
([参数1], [参数2], [参数3],.... [参数n])->{代码块}
若方法没有返回值且代码只有一行:(下图)
如果方法没有返回值且只有一行代码,则Lambda表达式语法可以是这种形式:(下图)
([参数1], [参数2], [参数3],.... [参数n])->单行语句