1.何为内部类:顾名思义就是包含在类中的类,就叫做内部类,内部类就两种:静态内部类和非静态内部类;
2.静态内部类:
public class School{
private static School school = null;
static class Teacher {}
}
非静态内部类:
public class School {
private String name;
class Teacher {}
}
3.两者之间的区别
静态内部类是属于外部类的类成员,是一种静态的成员,是属于类的,类似于静态变量,符合静态的特性;非静态内部类,是属于外部类一个的实例对象的一个实例成员,就是说:每个非静态内部类,不是属于外部类的,而是属于外部类的每一个实例的,创建每一个非静态内部类实例以后,这个实例是必须跟外部类的实例进行关联和有寄存关系的。
4.两者创建方式的区别
创建静态内部类的方式:直接使用(外部类.内部类())的方式创建,比如new Teacher.Student();创建非静态内部类的时候,必须要首先创建一个外部类的实例,然后通过外部类的实例再来创建非静态内部类,比如new Teacher().Student(); 通常为了方便会选择使用静态内部类
5.匿名内部类的使用方法
样例:
public interface ISayHello{
String sayHello(String name);
}
public class SayHelloTest{
public static void main(String [] args){
ISayHello say= new ISayHello() {
public String sayHello(String name){ return "hello,"+name; }
}
System.out.println(say.sayHello("lala"));
}
}
匿名内部类的使用场景:通常来说,就是一个内部类,只要创建一次,使用一次,以后就不再使用的情况下,就可以
那么,此时,通常不会选择在外部创建一个类,而是选择直接创建一个实现了某个接口、或者继承了某个父类的内部类,而且通常是在方法内部,创建一个匿名内部类。
在使用java进行spark编程的时候,如果使用的是java7以及之前的版本,那么通常在对某个RDD执行算子,并传入算子的函数的时候,通常都会传入一个实现了某个Spark Java API中Function接口的匿名内部类。