java 匿名内部类

1. 匿名内部类介绍

使用 Java 编程时,常常需要创建不会被再次使用的对象。在这种情况下,非常适合使用一种特殊
的内部类:匿名内部类。这种类没有名称,是在同一条语句中声明和创建的。
要使用匿名内部类,可将引用对象的代码替换为关键字 new、对构造函数的调用以及用大括号
({和})括起的类定义。
既然是匿名类,所以你无法在别的地方实例化和使用这个类。
匿名内部类也可用于接口(interface)的实现

特点

匿名对象:没有名字的对象。
new ClassName().run();

非匿名对象:含有名字的对象。
ClassName c=new ClassName();
c.run();

2. 匿名内部类语法

例如一般的写法:

ThreadClass task = new ThreadClass();
Thread runner = new Thread(task);
runner.start();

转化成:

Thread runner = new Thread(new Runnable() {
    public void run() {
        // thread does its work here
    }
});
runner.start();

即,这相当于将 Thread(task)的参数task替换成下面的代码实现:

new Runnable() {
    public void run() {
        // thread does its work here
    }
}

2.1 匿名内部类的另一种写法

new 类名或者接口名() {
    重写方法;
}

var t = new Thread() {
    public void run() {
        这是被重写的方法;
    }
}

3. 我的代码实现

class GoogleInc {
    void google1() {
        System.out.println("Google 1 Inc class, google 1");
    }

    void google2() {
        System.out.println("Google 2 Inc class, google 2");
    }
}


class AnonymousClass {
    AnonymousClass(GoogleInc golc) {
        golc.google1();
        golc.google2();
    }
}


public class AnonymousInnerClass {
    public static void main(String[] args) {
        AnonymousClass gc = new AnonymousClass(new GoogleInc() {
            // Overloaded function [google1()]
            void google1() {
                System.out.println("Anonymous inner class, google 1");
            }

            void doAnotherAnything() {
                System.out.println("Do another anything");
            }
        });
    }
}

4. 使用匿名内部类实现接口

HardwareInc这是一个接口,这个接口同时还继承了另外一个接口,继承另外一个接口只是将另外一个接口的抽象方法添加到这个接口中,并没有其他的特别之处,这样这个接口中的抽象方法总数为这个接口的抽象方法数加另一个接口的抽象方法数

public interface HardwareInc {
    public void designPhone();
    public void designComputer();
    public void designWatch();
}

class HuaweiInc {
    // Use anonymous inner classes to implement interfaces HardwareInc
    HuaweiInc(HardwareInc hwi) {
        hwi.designPhone();
        hwi.designComputer();
        hwi.designWatch();
        hwi.elec();
        hwi.software();
    }
}

// Use anonymous inner classes to implement interfaces HardwareInc
HuaweiInc HwInc = new HuaweiInc(new HardwareInc() {
    @Override
    public void designPhone() {
        System.out.println("Huawei design Huawei mate40");
    }

    @Override
    public void designComputer() {
        System.out.println("Huawei design Huawei matebook");
    }

    @Override
    public void designWatch() {
        System.out.println("Huawei design watchGT");
    }

    @Override
    public void elec() {
        System.out.println("Huawei have elec developer");
    }

    @Override
    public void software() {
        System.out.println("Huawei have software developer");
    }
});
  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值