内部类,静态内部类,匿名内部类

  内部类:就是我是你的一部分,我了解你,我知道你的全部,没有你就没有我。(所以内部类对象是以外部类对象存在为前提的)

以动物园来举例子,动物园(class zoo)里面有猴子(monkey)类,有鱼(fish)类,但鱼和猴子都是zoo类的一部分

public class Zoo {
    void say(){
        System.out.println("这里是动物园");
    }
    class fish {
        void say() {
            System.out.println("我是鱼,我在动物园里面");
        }
    }
    class monkey{
            void say(){
                System.out.println("我是猴子,我在动物园里面");
            }
    }

  静态内部类:就是我跟你没关系,自己可以完全独立存在,但是我就借你的壳用一下,来隐藏自己。

public class Zoo {
    void say(){
        System.out.println("这里是动物园");
    }
 static class fish {
        void say() {
         System.out.println("我是鱼,不一定要new出动物园才有我");
        }
    }
    class monkey{
            void say(){
                System.out.println("我是猴子,必须有动物园才能有我");
            }
    }

    public static void main(String[] args) {
        Zoo zoo = new Zoo();
        Zoo.monkey monkey = zoo.new monkey();
        monkey.say();
        Zoo.fish fish = new Zoo.fish();
        fish.say();
    }
}
我是猴子,必须有动物园才能有我
我是鱼,不一定要new出动物园才有我

Process finished with exit code 0

匿名内部类:

匿名内部类比较实用,它比较符合当初设计内部类时的场景。就是在某些场合需要使用类,但这个类只使用一次,以后再也不会使用了。 

一个继承了类的子类的匿名对象 或者一个实现了接口的实现类的匿名对象。

开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作。

1、定义子类

2、重写接口中的方法

3、创建子类对象

4、调用重写后的方法

我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。

以接口为例

public interface Anmial{
    String say();
}
    public static void main(String[] args) {
     Anmial anmial = new Anmial(){

            @Override
            public String say() {
                return "我是接口内部类,没有创建接口的实现类,没有名称,是临时创建的,执行完就被抛弃";
            }
        };
        System.out.println(anmial.say() );
    }
我是接口内部类,没有创建接口的实现类,没有名称,是临时创建的,执行完就被抛弃

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值