zoukankan      html  css  js  c++  java
  • 内部类二:匿名内部类

    一 匿名内部类的定义

    匿名内部类是继承某个类或者实现某个接口的没有类名的类,因为没有类名,所以需要类对象的创建与类的定义放在一条语句中。

    二采用默认构造器创建匿名内部类

    如下例:

    接口Contents

    package chapter10;
    
    public interface Contents {
        int value();
    }

    创建一个实现了接口Contents的匿名内部类

    package chapter10;
    
    public class Pracel7 {
        public static void main(String[] args) {
            
            Contents content=new Contents() {
                private int i=11;
                @Override
                public int value() {
                    return i;
                }};
        }
    }

    在上面的例子中,可以看到类的对象的创建与类的定义放在了一起。

    三 采用有参构造器创建匿名内部类

    如果是那种采用有参构造器创建匿名内部类对象,那么这个匿名内部类一定是一个带有有参构造器的类的子类,不能是一个实现了某个接口的匿名内部类,因为

    Multiple markers at this line
    - Interfaces cannot have constructors
    - This method requires a body instead of a

    例子:

    含有有参构造器的类

    package chapter10;
    
    public class Wrapping {
        private int i;
    
        // 有参构造器
        public Wrapping(int x) {
            i = x;
        }
    
        public int value() {
            return i;
        }
    
    }
    package chapter10;
    
    public class Parcel8 {
        
        public static void main(String[] args) {
            int i=10;
            //基于构造器创建匿名内部类
            Wrapping obj=new Wrapping(1) {
                
                public int value() {
                    return super.value()*47;
                }
            };
            
            obj.value();
        }
        
    }

    四 匿名内部类使用外围类的局部变量,必须是final的

    在jdk8以上,虽然外部类的局部变量传递到内部类中,可以不用final进行修饰,但是外部类的局部变量还是final的,是不允许修改的。

    否则会报如下错误

    Local variable dest defined in an enclosing scope must be final or effectively final

  • 相关阅读:
    最有价值的专家--微软官方网站
    CC++初学者编程教程(16) 搭建Xcode cocos2dx开发环境--尹成老师博客
    微软最具价值的专家之毛星云博客
    Winsock IO模型之IOCP模型
    IOCP模型与网络编程
    关于proc索引的创建
    查找表存在于那些proc中
    Sql 时间做条件
    Sql 无指定条件,防并发update
    sql 根据客户需用 增减查询字段
  • 原文地址:https://www.cnblogs.com/cplinux/p/13085522.html
Copyright © 2011-2022 走看看