Note:
1. 相当于说,我们可以在类的内部再定义类。外面的类:外部类。在里面定义的类:内部类。
2. 内部类的分类:成员内部类(声明在类内部且方法外) vs 局部内部类(声明在类的方法里)
3. 成员内部类:
3.1 是外部类的一个成员:1.可以有修饰符(4个)2.static final 3.可以调用外部类的属性、方法
3.2 具体类的特点: 1.abstract 2.还可以在其内部定义属性、方法、构造器
4. 局部内部类:
5. 关于内部类,掌握三点:
1. 如何创建成员内部类的对象(如:创建Bird类和Dog类的对象)
2. 如何区分调用外部类、内部类的变量(尤其是变量重名时)
3. 局部内部类的使用(见TestInnerClass1)
TestInnerClass代码示例:
public class TestInnerClass { public static void main(String[] args) { //创建静态内部类的对象:可以直接通过外部类调用静态内部类的构造器 Person.Dog d = new Person.Dog(); // Person.Bird b = new Person.Bird(); //创建非静态的内部类的对象:必须先创建外部类的对象,通过外部类的对象调用内部类的构造器 Person p = new Person(); Person.Bird b= p.new Bird(); b.info(); b.setName("杜鹃"); } } class Person { String name = "小明"; int age; //成员内部类(非静态的) class Bird { String name = "鹦鹉"; int id; public Bird() { } public void setName(String name) { System.out.println(name); //杜鹃 System.out.println(this.name); //鹦鹉 System.out.println(Person.this.name); //小明 this.name = name; } public void info() { show(); } } //成员内部类(静态内部类) static class Dog { } public void show() { System.out.println("我是show()方法"); } public void method1() { class A { } } }
结果:
我是show()方法
杜鹃
鹦鹉
小明
TestInnerClass1代码示例:
/* * 关于局部内部类的使用 * */ public class TestInnerClass1 { } class OuterClass { public void method1() { //局部内部类 该使用方式较少 class InnerClass { } } //常常使用一个方法,使其返回值为某个类或接口的对象,而这个类或接口在方法内部创建 //使用方式1 public Comparable getComparable() { //1.创建一个实现Comparable接口的类:局部内部类 class MyComparable implements Comparable { @Override public int compareTo(Object o) { return 0; } } //2.返回一个实现类的对象 return new MyComparable(); } //使用方式2 public Comparable getComparable1() { //返回一个实现Comparable接口的匿名内部类的对象 return new Comparable() { @Override public int compareTo(Object o) { return 0; } }; } }