1.在外部类中调用成员内部类的方法应该是:
当前对象.成员内部类对象.实例方法();实例属性同理
2.而在成员内部类中调用外部类中的实例方法应该是:
指向外部类对象的引用.实例方法();实例属性同理
例如:
public class OutClass {//外部类
int a=10;
public void m(){
System.out.println("外部类中的方法");
}
public static void main(String[] args) {
System.out.println(new OutClass().new InClass().a);//外部类调用内部类中的属性
new OutClass().new InClass().m();
}
public class InClass{//成员内部类
int a=20;
public void m(){
System.out.println("内部类中的方法");
System.out.println(new OutClass().a);//内部类调用外部类中的属性
new OutClass().m();
}
}
}
3.对于静态内部类,在外部类中使用 指向外部类对象的引用.实例方法()/属性 去调用成员内部类的实例方法/属性,反之亦然
例如:
public class OutClass2 {
int a=10;
public void m(){
System.out.println("外部类中的实例方法");
}
public static void main(String[] args) {
System.out.println(new innerClass2().a);//外部类调用内部实例属性
new innerClass2().m(); //外部类调用内部实例方法
}
static public class innerClass2{//静态内部类
int a=20;
public void m(){
System.out.println("内部类中的实例方法");
System.out.println(new OutClass2().a);//内部类调用外部实例属性
//new OutClass2().m();//内部类调用自己的实例方法(new OutClass2().可省略)注释掉避免死循环
System.out.println(a);//内部类调用自己实例属性
//m2();//内部类调用自己的静态方法,注释掉避免死循环
}
public static void m2(){
System.out.println("内部类中的静态方法");
}
}
}
4.局部内部类就比较特殊,因为其是出现在方法中的类,所以它的调用有一定约束
因为局部内部类作为局部属性,在其他地方(作用域外)无法使用,导致局部内部类在其他方法中无法创建对象;局部内部类的对象 必须创建在所在方法中,并且在局部内部类自身之后
例如:
public class JuBuClass {
public static void main(String[] args) {
int a=10;
new JuBuClass().m();
//JuBu jubu = new JuBu();//报错,此处无法创建局部内部类对象
}
public void m(){
int a=20;
//JuBu jubu = new JuBu();//报错,此处无法创建局部内部类对象
class JuBu{//局部内部类不能有修饰符
int a=30;
public void m(){
System.out.println("这是局部内部类中的方法m");
}
}
JuBu jubu = new JuBu();new JuBu();//局部内部类的对象 必须创建在所在方法中,并且在局部内部类自身之后
System.out.println(jubu.a);
jubu.m();
}
}
只有在局部内部类所在的方法中,并且局部内部类之后,才可以通过创建局部内部类来调用相关方法