Java匿名内部类学习

Java匿名内部类

  1. 匿名内部类基本知识与用法
    匿名内部类,是一个没有类名的类,通常用在当一个继承父类或者实现接口的类只需要用一次的时候,用来简化代码编写。总结一下匿名内部类有几个基本点:
    *继承父类或者实现接口或者实现抽象类
    *匿名内部类用new来生成一个继承父类的对象的引用,因此可以用来作为参参数传递
    *匿名内部类只能使用一次

  2. 利用代码来测试继承父类、实现接口、实现抽象类的用法

abstract class afather {
    public abstract void eat();
}

class father {
    public void eat(){
        System.out.println("eat person");
    }
}

interface ifather{
    public void eat();
}


class Child extends father {
    public void eat() {
        System.out.println("eat child");
    }
}

public class Test {
    public static void main(String[] args) {
        //非匿名内部类的用法
        father fc = new Child();
        fc.eat();

        //继承父类的匿名内部类
        father f = new father(){
            public void eat(){
                System.out.println("eat nonameinnerclass");
            }
        };
        f.eat();

        //实现抽象类的匿名内部类
        afather af = new afather(){
            public void eat(){
                System.out.println("eat afather");
            }
        };
        af.eat();

        //实现接口的匿名内部类
        ifather ifa = new ifather(){
            public void eat(){
                System.out.println("eat interface");
            }
        };
        ifa.eat();
    }

}

运行结果:
eat child
eat nonameinnerclass
eat afather
eat interface

  • 利用代码测试匿名内部类作为参数传递
abstract class afathers {
    public abstract void eat();
}

class others{
    public void getafather(afathers a){
        a.eat();
    }
}

public class Test2 {
    public static void main(String[] args) {
        // 相当于传递了一个实现afathers类的子类的引用
        new others().getafather(
                new afathers(){
                    public void eat(){
                        System.out.println("eat");
                    }
                }
        );
    }
}
  1. 一些注意事项

    http://blog.csdn.net/chenssy/article/details/13170015(http://blog.csdn.net/chenssy/article/details/13170015)

    在使用匿名内部类的过程中,我们需要注意如下几点:
    1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
    2、匿名内部类中是不能定义构造函数的。
    3、匿名内部类中不能存在任何的静态成员变量和静态方法。
    4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
    5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

2.内部类使用参数必须是final类型
原因:内部类并不是直接使用的外部的参数,而是编译时有自己单独的.class文件,也就是说它是拷贝了一份参数,为了避免参数改变,造成数据不一致,要求数据必须是final类型
参考:[http://android.blog.51cto.com/268543/384844]

3.匿名内部类初始化
匿名内部类没有构造器,一般使用静态代码块来完成初始化操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值