目录
1、内部类
1.1、成员内部类
成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)
public class OuterClass {
private String str;
class NonStaticInnerClass {
void innerClassMethod() {
System.out.println(str);
}
}
}
当成员内部类拥有和外部类同名的成员变量或者方法时,会默认访问的是成员内部类的成员。要访问外部类的同名成员,需要以下面的形式进行访问:
public class OuterClass {
private String str;
class NonStaticInnerClass {
private String str;
void innerClassMethod() {
System.out.println(str); 内部类成员变量
System.out.println(OuterClass.this.str); 外部类成员变量
}
}
}
1.2、局部内部类
class People{
public People() {
}
}
class Man{
public Man(){
}
public People getWoman(){
class Woman extends People{ //局部内部类
int age =0;
}
return new Woman();
}
}
1.3、匿名内部类
public interface InnerService {
void test();
}
public class OuterClass {
public void outerClassMethod(InnerService inner) {
System.out.println("外部类打印:");
inner.test();
}
}
import com.busy.innerclass.InnerService;
import com.busy.innerclass.OuterClass;
public class TestMain {
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
outerClass.outerClassMethod(new InnerService() {
@Override
public void test() {
System.out.println("Inner Class");
}
});
}
}
1.4、静态内部类
public class OuterClass {
private String str;
static class StaticInnerClass {
void innerClassMethod() {
System.out.println(new OuterClass().str);
}
}
}
1.5、优缺点
增强封装性、不利于代码重用
2、内部接口
public interface OuterService {
void outerMethod();
interface InnerService {
void innerMethod();
}
}
public class OuterServiceImpl implements OuterService {
@Override
public void outerMethod() {
}
class InnerServiceImpl implements InnerService {
@Override
public void innerMethod() {
}
}
}