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、 内部类位置
成员位置:在成员位置定义的类,被称为成员内部类。
局部位置:在局部位置定义的类,被称为局部内部类。
成员位置:在成员位置定义的类,被称为成员内部类。
1 class Outer { 2 private int num = 10; 3 4 //成员位置 类里方法外? 5 /* 6 class Inner { 7 8 } 9 */ 10 public void method() { 11 //局部位置 类里方法内? 12 class Inner { 13 14 } 15 } 16 } 17 18 class InnerClassDemo2 { 19 public static void main(String[] args) { 20 21 } 22 }
3、 成员内部类:
如何直接访问内部类的成员。
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
1 class Outer { 2 private int num = 10; 3 4 class Inner { 5 public void show() { 6 System.out.println(num); 7 } 8 } 9 } 10 11 class InnerClassDemo3 { 12 public static void main(String[] args) { 13 //需求:我要访问Inner类的show()方法 14 //Inner i = new Inner(); 15 //i.show(); 16 17 //格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象; 18 Outer.Inner oi = new Outer().new Inner(); 19 oi.show(); 20 } 21 }
面试题:
要求请填空分别输出30,20,10。
1 class Outer { 2 public int num = 10; 3 class Inner { 4 public int num = 20; 5 public void show() { 6 int num = 30; 7 System.out.println(XX); 8 System.out.println(XX); 9 System.out.println(XX); 10 } 11 } 12 }
1 答案: 2 class Outer { 3 public int num = 10; 4 class Inner { 5 public int num = 20; 6 public void show() { 7 int num = 30; 8 System.out.println(num); 9 System.out.println(this.num); 10 //System.out.println(new Outer().num); 11 System.out.println(Outer.this.num); //限定了this.num的范围 12 } 13 } 14 } 15 class InnerClassTest { 16 public static void main(String[] args) { 17 Outer.Inner oi = new Outer().new Inner(); 18 oi.show(); 19 } 20 }