内部类

在书上看到关于内部类的东西,发现自己以前有一些理解错误了

上代码:

public class Parce17{
    public Contents contents(){
    //这里的new Contents()并非是创建一个Contents对象,而是创建一个继承Contents的匿名类(只是这个匿名类没有名字而已),最终返回的是Contents的引用(向上转型)
        return new Contents(){
            private int i = 1;
            publi int intVaue(){return i;}
        }
    }

    public static void main(String[] args){
        Parce17 a = new Parce17();
        Contents c = a.contents();
    }
}

在这里说一下关于概念的误区
Parce17的contents()方法将返回值的生成与表示的这个返回值的类的定义结合在一起,另外这个类似匿名的。看起来是要新建一个Contents对象,但是实际是(在到达语句结束的分号之前),这种奇怪的语法值得是:“创建一个继承Content的匿名类的对象”,通过new表达式返回的引用被自动向上转型为Contents的引用

在匿名类中要传入参数的话,传的参数应该是是带有final类型的,因为这个参数是要匿名类要内部使用的

优先使用类而不是接口,如果你的设计需要某个接口,你必须要去了解他。否则不到万不得已,不要将其放到你的设计中。

为什么需要内部类

如果要实现一个接口的引用,直接让其实现该接口就行了。为什么需要内部类这种语法呢?用内部类实现一个接口和外围类实现一个接口到底有什么区别呢?答案是:后者不是总能享受到接口带来的方便,又是需要用到接口的实现。
每个内部类都能独立集成一个接口的实现,所以无论外围内是否已经继承了某个接口的实现,对于内部类都没有任何影响。

闭包(Closure) 回调(callback)

闭包是一个可调用的对象,记录了一下信息。这些信息来源于创建它的作用域。通过这个定义,可以看出内部类是面向对象的闭包。因为他不仅包含外围对象的信息,还自动拥有一个指向外围对象的引用。在此作用域类,内部类可以操作所有的权限成员。
通过内部类提供闭包的功能是比较优良的解决方案。回调的价值在于你可以动态的决定要调用什么方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值