成员内部类
静态内部类
局部内部类
匿名内部类
主要:局部内部类、匿名内部类
成员内部内类
1、成员内部类可以等同看作成员变量
2、成员内部类可以直接访问外部类的静态数据,无法直接访问成员
3、成员内部类中不能有静态声明
4、成员内部类可以访问外部类所有的数据
本类内,主方法外定义的类
成员内部类InnerClass中方法m1的调用:
成员内部类中的方法必须创建成员内部类的对象来调用
//InnerClass inner = new InnerClass();
但这样无法创建成员内部类的对象,因为成员内部类的构造方法的调用必须创建外部类(OuterClass)的对象才能调用
//OuterClass oc = new OuterClass();
//InnerClass inner = oc.new InnerClass();
public class OuterClass {
//静态变量
private static String s1 = "A";
//成员变量
private String s2 = "B";
//静态方法
private static void m1(){
System.out.println("静态方法m1执行");
}
//成员方法
private void m2(){
System.out.println("成员方法m2执行");
}
//成员内部类,可以用访问控制权限修饰符修饰
class InnerClass{
//定义成员方法
//public static void m3(){}//成员内部类中不能有静态声明(方法、变量)
//定义成员方法
public void m4(){//尽管是成员方法,但在静态内部类中,同样无法访问成员变量/方法
System.out.println(s1);
System.out.println(s2);
m1();
m2();
}
}
public static void main(String[] args){
//执行m4方法
OuterClass oc = new OuterClass();//创建外部类对象
InnerClass inner = oc.new InnerClass();//创建内部类对象
inner.m4();
}
}
静态内部类
1、静态内部类可以等同看作静态变量
2、作用:可以访问外部类中私有的数据
结论:静态内部类可以直接访问外部类的静态数据,无法直接访问成员(变量、方法)。
public class Test01 {
//静态变量
private static String s1 = "A";
//成员变量
private String s2 = "B";
//静态方法
private static void m1(){
System.out.println("静态方法m1执行");
}
//成员方法
private void m2(){
System.out.println("成员方法m2执行");
}
//静态内部类,可以用访问控制权限修饰符修饰
static class InnerClass{
//定义静态方法
public static void m3(){
System.out.println(s1);
//System.out.println(s2);//静态方法无法直接访问成员变量
m1();
//m2();同理不可以
}
//定义成员方法
public void m4(){//尽管是成员方法,但在静态内部类中,同样无法访问成员变量/方法
System.out.println(s1);
//System.out.println(s2);
m1();
//m2();
}
}
public static void main(String[] args){
//执行m3
Test01.InnerClass.m3();
//执行m4
InnerClass t = new Test01.InnerClass();
t.m4();
}
}