为什么使用内部类
我们知道,java提供了一种语言特性:内部类。一开始接触内部类,感觉这种机制确实很神奇,但是转念一想似乎这种机制又有些多余。因为我们完全可以用外部类的形式去实现和内部类相同的功能,比如我的上一篇文章中的工厂模式(http://blog.csdn.net/hmzdbql/article/details/7691055)。那么内部类到底有什么好处呢?
我们设想这样一种情形,如果有一个类A,一个类B他们分别实现了不同的功能(注意这个时候的A,B类都是实体类而不是抽象类或者接口)。现在我们需要写一个类C,它需要使用类A类B中的全部功能,也就是我们通过类C可以直接使用类A和类B中的方法。想想应该如何去实现呢?你或许想到了继承,的确继承是一个很好的方式。但是很快你就会发现悲剧:java不支持多继承...类C不可能以继承的方式去使用类A和类B中的所有方法。似乎没辙了...其实不然,这个时候内部类就派上了用场。看下面的代码:
class A { public void f() { // 方法内容 } } class B { public void g() { // 方法内容 } } class C extends A { B getB() { return new B() { //可以在这里扩展B类的方法 }; } } public class Test { public static void main(String[] args) { C c = new C(); c.f();// 调用了类A的f()方法 c.getB().g();// 调用了类B的g()方法 } }
通过这个例子我们看到C类实现了对A,B类方法的完全集成。我们只需要使用C类便可以使用A,B类中的所有方法。换言之,也就是我们使用内部类实现了多继承....
同时使用内部类我们还可以得到其他一些额外的好处:我们发现在内部类中我们可以扩展B类的方法,这无疑是一个很大的好处。
当然,上面的方式也可以采用别的方式实现,而不使用内部类。比如我们在C类中添加方法getA();getB()便可以分别得到A,B对象。也可以实现同样的效果。但是假如我们遇到了一个必须使用多继承才能解决的问题,内部类无疑是首选也是必选。从另外一个方面,我们知道C++支持多继承,而java不支持。很多时候会造成不便,有了内部类的机制支持同样可以实现多继承,算是java的另一种特性所在吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示