内部类的作用:
内部类可以很好的实现功能隐藏,可以添加private、protected等权限控制
可以避免修改接口而实现同一个类中两种同名方法的调用
可是实现多重继承(重要)
内部类和外部类相互调用方式:
一:非静态内部类
内部类调用外部类
1.非静态内部类,不能存在静态方法
2.非静态方法,调用外部类的非静态方法、静态方法都可以直接调用
外部类调用内部类
1.非静态方法,调用内部的非静态方法 new Inner().innerMethod();
2.静态方法,调用内部类的非静态方法 new Outer().new Inner().innerMethod();
二:静态内部类
内部类调用外部类
1.非静态、静态方法,调用静态方法直接调用
2.非静态、静态方法,调用非静态方法 new Outer().outMethod();
外部类调用内部类
1.非静态、静态方法,调用非静态方法 new Outer.StaticInner().innerMethod();
2.非静态、静态方法,调用静态方法 Outer.StaticInner.innerStaticMethod();
**示例代码
public class Outer {
private void outMethod(){
System.out.println("i am out non-static method");
new Inner().innerMethod();
new Outer.StaticInner().innerMethod();
Outer.StaticInner.innerStaticMethod();
}
private static void outStaticMethod(){
System.out.println("i am out static method");
new Outer().new Inner().innerMethod();
new Outer.StaticInner().innerMethod();
Outer.StaticInner.innerStaticMethod();
}
class Inner{
private void innerMethod(){
System.out.println("i am inner non-static method");
outMethod();
outStaticMethod();
}
// //error non-static class canot have static cmethod
// private static void innerStaticMethod(){
// System.out.println("i am inner static method");
// }
}
static class StaticInner{
private void innerMethod(){
System.out.println("i am staticinner non-static method");
outStaticMethod();
new Outer().outMethod();
}
private static void innerStaticMethod(){
System.out.println("i am staticinner static method");
outStaticMethod();
new Outer().outMethod();
}
}
}