- 1、成员内部类定义在外部类成员位置,并且没有static修饰。
- 2、成员内部类可以直接访问外部类的所有成员,包括私有的。
- 3、可以添加任意访问修饰符(public,protected,默认,private),因为其地位就是一个成员。
- 4、作用域:同外部类的其他成员为整个类体。
- 5、成员内部类----访问----外部类(访问方式:直接访问)
- 6、外部类----访问-----内部类(访问方式:创建对象,再访问)
- 7、外部其他类----访问----成员内部类,方式1:作为外部类成员直接访问,但其本质又是一个类故需要关键字new创建;
- 8、外部其他类----访问----成员内部类,方式2:作为外部类方法值返回(即在外部类中编写一个专门用于对外提供访问的方法)
- 外部其他类----访问----成员内部类,不管哪种访问方式前提必须是成员内部类提供了对外访问权限
- 10、若外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问
public class MemberInnerClass {
public static void main(String[] args) {
Outer outer = new Outer();
outer.outer_method1();
Outer.MemberInner2 memberInner2 = new Outer().new MemberInner2();
memberInner2.inner_method2();
Outer.MemberInner2 memberInner21 = new Outer().getMemberInner2();
}
}
class Outer{
private int outer_i=10;
public int outer_j=20;
public void outer_method1(){
MemberInner1 memberInner1 = new MemberInner1();
memberInner1.inner_method1();
}
private void outer_method2(){
System.out.println("外部类私有方法");
}
private class MemberInner1{
public void inner_method1() {
System.out.println("outer_i"+outer_i+";outer_j="+outer_j);
}
}
public class MemberInner2{
public void inner_method2() {
outer_method2();
}
}
public MemberInner1 getMemberInner1(){
return new MemberInner1();
}
public MemberInner2 getMemberInner2(){
return new MemberInner2();
}
}