内部类(Java)

一、定义

如果一个类定义在另一个类的内部,那么这个类就是内部类。

使用场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计的时候,就可以把这个事物设计成内部类:

public class person{
         //内部类
         public class heart{
     }
}

 分类:成员内部类、静态内部类、局部内部类、匿名内部类

二、成员内部类

成员内部类是类中的一个普通成员,类似与成员变量、成员方法

定义一个内部类:

public class Outer {
    public class Inner{
        //类有的东西都可以有
        private String name;
        public static void test(){} //JDK16开始支持定义静态成员

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

创建一个内部类对象:

Outer.Inner in = new Outer().new Inner();

内部类可以访问外部类的成员。

获取不同的age示例:

内部类(Java)_第1张图片

我们可以通过外部类名.this拿到外部类对象。

三、静态内部类

有static修饰的内部类,属于外部类自己持有

public class Outer{
        //静态内部类
        public static class Inner{
     }
}

创建:

Outer.Inner in = new Outer.Inner();

静态内部类中访问外部类成员的特点:可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。

内部类(Java)_第2张图片

四、局部内部类 

局部内部类是定义在方法中、代码块中、构造器等执行体中的。

五、匿名内部类

匿名内部类是一种特殊的局部内部类;不需要为这类声明名字。

格式:

new  类或接口(参数值){

             类体(一般是方法重写)

};

有一种机制可以直接得到子类对象。

public class Test {
    public static void main(String[] args) {
    //原理:把匿名内部类编译成一个子类,然后立即创建一个子类对象
    Animal a = new Animal(){
        @Override
        public void jiao(){
            System.out.println("猫叫");
        }
    };
    a.jiao();


    }
}

abstract class Animal{
    public abstract void jiao();
}

结果: 

内部类(Java)_第3张图片

使用场景:通常作为一个参数传输给方法

注意观察下面go方法的使用:

public class Test2 {
    public static void main(String[] args) {
        //常见使用场景示例
        write stu = new write() {
            @Override
            public void writting() {
                System.out.println("学生写读后感");

            }
        };
        go(stu);
        go(new write() {
            @Override
            public void writting() {
                System.out.println("老师写读后感");

            }
        });
    }
public static void go(write w) {
    System.out.println("--------开始写读后感--------");
    w.writting();
}
    //学生和老师都要写读后感
    interface write {
        void writting();
    }
}

内部类(Java)_第4张图片

你可能感兴趣的:(java,java,开发语言)