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

  • 相关阅读:
    iOS学习——键盘弹出遮挡输入框问题解决方案
    知识扩展——Git和GitHub的区别
    iOS项目——项目开发环境搭建
    iOS学习——iOS项目Project 和 Targets配置详解
    iOS扩展——Objective-C开发编程规范
    iOS学习——Xcode9上传项目到GitHub
    Mac OS Sierra如何打开任何来源
    iOS学习——UIAlertController详解
    iOS学习——获取iOS设备的各种信息
    Drag and drop folder to a TextBox in C#
  • 原文地址:https://www.cnblogs.com/cplinux/p/13085522.html
Copyright © 2011-2022 走看看