静态内部类
使用了static 进行修饰的内部类 创建语法:new 外部类.内部类(); 内部类可以间接的访问到外部类的静态的私有属性; 外部类也可以间接的访问到内部类的静态的私有属性; 内部类和外部类的非静态属性的访问可以通过实例化的方式进行; 总结: 静态内部类与外部类的耦合程度非常低,基本与非内部类相同,区别只是在于外部类和静态内部类的私有成员的访问权限上。
public class ClassOut {
private String name = "huwenchao" ;
public String getName ( ) {
return name;
}
public static class ClassIn {
private String nameIn ;
public String getNameIn ( ) {
return new ClassOut ( ) . getName ( ) ;
}
}
}
@Test
public void test1 ( ) {
System. out. println ( new ClassOut. ClassIn ( ) . getNameIn ( ) ) ;
}
非静态内部类
没有使用static进行修饰的内部类 不能拥有静态代码块、静态方法、静态属性和静态内部类 创建方法:需要先创建外部类,再使用外部类的对象创建内部类对象:new Out().new In() 内部类对象间接地共享了外部类的对象的属性和方法 外部类如果存在子类,那么子类特有的属性和方法是对内部类隐藏的(因为内部类中无法使用) 外部类和内部类中存在重名的属性,内部类中若要制定访问外部类的属性的话,使用Out.this.属性名进行访问 总结: 非静态内部类,与外部类之间是存在一定的耦合程度的,内部类中通过 外部类名.this的方式可以访问到外部类的属性,也就是说非静态内部类中是持有外部类的引用的
public class ClassOut {
private String name = "huwenchao" ;
public String getName ( ) {
return name;
}
public class ClassIn {
private String name = "xiehuihui" ;
public void testName ( ) {
System. out. println ( this . name) ;
System. out. println ( ClassOut. this . name) ;
}
}
}
@Test
public void test1 ( ) {
ClassOut out = new ClassOut ( ) ;
ClassOut. ClassIn in = out. new ClassIn ( ) ;
in. testName ( ) ;
}
xiehuihui
huwenchao
方法区内部类
在方法内部进行class的定义,如方法为静态方法,则无法访问外部类中的非静态属性,
匿名内部类