内部类(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示例:

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

三、静态内部类

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

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

创建:

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

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

四、局部内部类 

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

五、匿名内部类

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

格式:

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

结果: 

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

注意观察下面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();
    }
}

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何仙鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值