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

您所在的位置:网站首页 接口引用指向实现类 Java内部类之匿名内部类(实现接口,附详细代码示例)

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

#Java内部类之匿名内部类(实现接口,附详细代码示例)| 来源: 网络整理| 查看: 265

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

    /**     * 匿名内部类的概念和特性:     * 1、匿名内部类只能也必须(有且仅有)继承一个父类或者实现一个接口,也可以重写父类普通方法;     * 2、匿名内部类不能是抽象类,因为定义匿名内部类时立即生成对象,而抽象类不允许生成对象;     * 3、匿名内部类没有类型,所以不能显式定义构造器,有一个隐式的无参构造器;     * 4、匿名内部类可以定义初始化块以初始化对象,以弥补没有构造器的缺陷;     * 5、最常用的匿名内部类的形式是:创建某个接口/抽象类的对象;     * 6、定义之后必须马上使用,没办法通过引用进行使用;     * 7、在匿名内部类和局部内部类中被访问到的局部变量,Java8之后默认为有final修饰,不可以重新赋值;     */

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

1 public interface ICampusActivity { 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 class Test { 2 public static void main(String[] args) { 3 int locationVar = 100; 4 // locationVar = 1000; //代码1 5 AnonymousClassac = new AnonymousClass(); 6 ac.test(new ICampusActivity() { // 创建一个匿名内部类,需要实现接口/抽象类所有的抽象方法 7 { 8 System.out.println("匿名内部类的初始化块"); 9 } 10 @Override 11 public int getStuNumber() { 12 return 15 + locationVar; 13 } 14 15 @Override 16 public String getProject() { 17 return "马拉松训练"; 18 } 19 }); 20 } 21 }

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

输出结果:

 

 

 

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

1 class implClass implements ICampusActivity { 2 @Override 3 public String getProject() { 4 return "马拉松训练"; 5 } 6 7 @Override 8 public int getStuNumber() { 9 return 15; 10 } 11 }

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

ac.test(new implClass());

效果是一样的!!!

 

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3