java 内部类实现接口_Java内部类之匿名内部类(实现接口,附详细代码示例)

此篇和上一篇的“使用抽象类”方式相互印证。

/**

* 匿名内部类的概念和特性:

* 1、匿名内部类只能也必须(有且仅有)继承一个父类或者实现一个接口,也可以重写父类普通方法;

* 2、匿名内部类不能是抽象类,因为定义匿名内部类时立即生成对象,而抽象类不允许生成对象;

* 3、匿名内部类没有类型,所以不能显式定义构造器,有一个隐式的无参构造器;

* 4、匿名内部类可以定义初始化块以初始化对象,以弥补没有构造器的缺陷;

* 5、最常用的匿名内部类的形式是:创建某个接口/抽象类的对象;

* 6、定义之后必须马上使用,没办法通过引用进行使用;

* 7、在匿名内部类和局部内部类中被访问到的局部变量,Java8之后默认为有final修饰,不可以重新赋值;

*/

定义一个接口:关于校园活动

1 public interfaceICampusActivity {2 public abstract String getProject(); //获取活动项目

3 public abstract int getStuNumber(); //获取活动人数

4 }

定义一个使用到这个接口的类:

1 public class AnonymousClass{ //定义一个类

2 public void test(ICampusActivity ca) { //test方法需要一个接口类型作为参数

3 System.out.println("正在进行的活动是:" +ca.getProject());4 System.out.println("参加活动的人数是:" +ca.getStuNumber());5 }6 }

定义一个测试类:

1 public classTest {2 public static voidmain(String[] args) {3 int locationVar = 100;4 //locationVar = 1000;//代码1

5 AnonymousClassac = newAnonymousClass();6 ac.test(new ICampusActivity() { //创建一个匿名内部类,需要实现接口/抽象类所有的抽象方法

7 {8 System.out.println("匿名内部类的初始化块");9 }10 @Override11 public intgetStuNumber() {12 return 15 +locationVar;13 }14

15 @Override16 publicString getProject() {17 return "马拉松训练";18 }19 });20 }21 }

特别说明:如果“代码1"处的赋值语句没有被注释,则第12行会报错,参考本文开始处第7点!

输出结果:

23bc881894237d31b33fe8e278332ec0.png

变体:其实可以定义一个接口的实现类,然后把这个实现类传给那个test方法作为参数:

1 class implClass implementsICampusActivity {2 @Override3 publicString getProject() {4 return "马拉松训练";5 }6

7 @Override8 public intgetStuNumber() {9 return 15;10 }11 }

然后把这个类的一个实例传给test方法:

ac.test(new implClass());

效果是一样的!!!

欢迎各路大神多多评论,指教!

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

weixin_39766867

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值