内部类写法
静态内部类
/**
* 外部类
*/
public class DataOuterClass {
private static String data = "外部类数据";
/**
* 内部类
*/
private static class InnerClass {
public String getData() {
// 内部类可直接访问外部类数据和方法
return data;
}
}
}
成员内部类(非静态内部类)
/**
* 外部类
*/
public class DataOuterClass {
private String data = "外部类数据";
/**
* 内部类
*/
private class InnerClass {
public String getData() {
// 内部类可直接访问外部类数据和方法
return data;
}
}
}
局部内部类(非静态内部类)
/**
* 外部类
*/
public class DataOuterClass {
private String data = "外部类数据";
public String getData() {
private final String name="hello";
/**
* 内部类
*/
private class InnerClass {
// 内部类可直接访问外部类数据和方法
return data + name;
}
}
}
匿名内部类(非静态内部类)
/**
* 外部类
*/
public class DataOuterClass {
private String data = "外部类数据";
public String getData() {
private final String name="hello";
/**
* 内部类
*/
new Thread() {
@Override
public void run() {
System.out.println(data + name);
}
}.start();
}
}
内部类作用
1、隐藏接口具体实现方法和实现类
2、完善java多继承
3、内部类可以直接访问外部类私有化数据
内部类分类
内部类分为静态内部类和非静态内部类,非静态内部类分为成员内部类、局部内部类、匿名内部类。
静态内部类由静态变量修饰,不能访问外部类的非静态属性。非静态内部类不能访问外部类的静态属性,且本身不能定义静态属性。局部内部类定义在方法内部,不可以使用方法中的非final变量,匿名内部类适用于只使用一次的情况(典型应用:线程)