java9-6 内部类

时间:2021-12-04 21:41:49

1、 内部类概述:
    把类定义在其他类的内部,这个类就被称为内部类。
    举例:在类A中定义了一个类B,类B就是内部类。

内部的访问特点:
    A:内部类可以直接访问外部类的成员,包括私有。
    B:外部类要访问内部类的成员,必须创建对象。

class Outer {
private int num = 10; class Inner {
public void show() {
System.out.println(num);
}
} public void method() {
//找不到符号
//show(); Inner i = new Inner();
i.show();
} } class InnerClassDemo {
public static void main(String[] args) { }
}

2、 内部类位置
    成员位置:在成员位置定义的类,被称为成员内部类。
    局部位置:在局部位置定义的类,被称为局部内部类。

    成员位置:在成员位置定义的类,被称为成员内部类。

 class Outer {
private int num = 10; //成员位置 类里方法外?
/*
class Inner { }
*/
public void method() {
//局部位置 类里方法内?
class Inner { }
}
} class InnerClassDemo2 {
public static void main(String[] args) { }
}

3、 成员内部类:
      如何直接访问内部类的成员。
      外部类名.内部类名 对象名 = 外部类对象.内部类对象;

 class Outer {
private int num = 10; class Inner {
public void show() {
System.out.println(num);
}
}
} class InnerClassDemo3 {
public static void main(String[] args) {
//需求:我要访问Inner类的show()方法
//Inner i = new Inner();
//i.show(); //格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}

面试题:
    要求请填空分别输出30,20,10。

 class Outer {
  public int num = 10;
class Inner {
  public int num = 20;
  public void show() {
    int num = 30;
      System.out.println(XX);
      System.out.println(XX);
      System.out.println(XX);
    }
    }
}
 答案:
class Outer {
  public int num = 10;
class Inner {
  public int num = 20;
  public void show() {
  int num = 30;
      System.out.println(num);
      System.out.println(this.num);
      //System.out.println(new Outer().num);
      System.out.println(Outer.this.num); //限定了this.num的范围
}
}
}
class InnerClassTest {
    public static void main(String[] args) {
        Outer.Inner oi = new Outer().new Inner();
           oi.show();
    }
}