首页 > 代码库 > 内部类学习笔记(三)匿名内部类
内部类学习笔记(三)匿名内部类
这篇不转载了,自己来写,因为匿名内部类是内部类系列里我认为最难理解的。
建立匿名内部类的关键点是重写父类的一个或多个方法。再强调一下,是重写父类的方法,而不是创建新的方法。因为用父类的引用不可能调用父类本身没有的方法!创建新的方法是多余的。简言之,参考多态。
A、继承式的匿名内部类。
引用转载代码:
<script src="https://code.csdn.net/snippets/410763.js" type="text/javascript"></script>
结果输出了:Driving another car! Car引用变量不是引用Car对象,而是Car匿名子类的对象。建立匿名内部类的关键点是重写父类的一个或多个方法。再强调一下,是重写父类的方法,而不是创建新的方法。因为用父类的引用不可能调用父类本身没有的方法!创建新的方法是多余的。简言之,参考多态。
这里可能大家看的比较迷糊,尤其是
Car car = new Car(){public void drive(){System.out.println("Driving another car!");}};
那么我来解释一下这段代码:他相当于
<script src="https://code.csdn.net/snippets/410779.js" type="text/javascript"></script>
他们的区别在于 xxx这个名字在这里是不需要的。
B、抽象类式和接口式的匿名内部类。
<script src="https://code.csdn.net/snippets/410790.js" type="text/javascript"></script>
上述是抽象类式的代码,接口的同抽象类的几乎一模一样,只是把abstract 换成interface。
C、参数式的匿名内部类
引用转载代码:
<script src="https://code.csdn.net/snippets/410797.js" type="text/javascript"></script>
如果你能把前A、B都搞清楚,这里就无需解释了。
总结:匿名内部类的核心就是“继承”与“实现”,因为内部类没有构造方法,因此内部类的初始化只有“代码块”。
你只要想,抽象类和接口怎么会new 出实例呢?一定是他们的子类。
如果你能把前A、B都搞清楚,这里就无需解释了。
总结:匿名内部类的核心就是“继承”与“实现”,因为内部类没有构造方法,因此内部类的初始化只有“代码块”。
你只要想,抽象类和接口怎么会new 出实例呢?一定是他们的子类。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。