#内部类
内部类定义:
包含在外部类中的类,一种静态内部类、一种非静态内部类。
//外部类
public class OuterClass {
//非静态内部类
class InnerClass{
}
//静态内部类
static class StaticInnerClass{
}
}
静态和非静态内部类的区别:
静态内部类:是外部类的静态成员,属于外部类。
非静态内部类:并不属于外部类,是属于外部类实例对象的一个实例成员。也就是说非静态内部类实例与它的外部类实例有寄存关系。有内部类实例一定有外部类实例反之不成立。
创建方式的区别
创建内部类实例:“外部类.内部类()”,比如 new OuterClass.InnerClass()。
创建内部类实例:“外部类().内部类()”必须先创建一个外部类实例,再创建内部类实例,比如 new OuterClass().InnerClass()。
为了方便,一般使用静态内部类。
匿名内部类
public interface ISayHello {
String sayHello(String name);
}
public class SayHelloTest {
public static void main(String[] args) {
ISayHello obj = new ISayHello() {
public String sayHello(String name) {
return "hello, " + name }
}
System.out.println(obj.sayHello("leo"))
}
}
匿名内部类的使用场景:**在一个内部类,只需要创建一次,使用一次,以后就不再使用。那么,此时,通常不会选择在外部创建一个类,而是选择直接创建一个实现了某个接口、或者继承了某个父类的内部类,而且通常是在方法内部,创建一个匿名内部类。
在使用java进行spark编程的时候,如果使用的是java7以及之前的版本,那么通常在对某个RDD执行算子,并传入算子的函数的时候,通常都会传入一个实现了某个Spark Java API中Function接口的匿名内部类。