Java基础巩固系列 类的成员之五:内部类(InnerClass)

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;
            }
        };
    }
}

猜你喜欢

转载自blog.csdn.net/Peter__Li/article/details/88957641
今日推荐