Java中引入内部类的意义

  • A+
所属分类:Java入门

定义

放在一个类的内部的类我们就叫做是内部类

作用

  1. 内部类可以很好的实现隐藏,一般的非内部类,是不允许有private与protected权限的,但内部类可以
  2. 内部类拥有外围类的所有元素的访问权限
  3. 可实现多重继承
  4. 可以避免修改接口而实现同一个类中两种同名方法的调用

特点

  1. 破坏了程序的结构
  2. 方便进行私有属性的访问(外部类也可以访问内部类的私有域)
  3. 如果发现类名称上出现了".",应当立即想到内部类的概念

意义

  • 完善多重继承
  1. C++作为较早期的面向对象编程语言,摸着石头过河,不幸的当了炮灰。比如多重继承,java是不太欢迎继承的,因为继承的耦合度太高。比如你是一个人,你想会飞,于是就继承了鸟这个类,然后你顺便拥有了一堆翅膀和厚厚的羽毛,可这玩意你并不需要。所以java发明了接口,以契约的方式向你提供功能。想想看,你的程序里成员变量会比函数多吗?况且多重继承会遇到死亡菱形的问题,就是两个父类有同样名字的函数,你继承谁的呢?其实C++也可以做到这些,那就是定义成没有成员变量的纯虚类,而且所有函数都是纯虚函数。可是这些都是要靠程序员自己把握,并没有把这些功能集成到类似interface这样的语法里。
  2. 所以java只支持单重继承,想扩展功能,即实现接口。很快java的设计者就发现了他们犯了矫枉过正的错误,多重继承还是有一定用处的。比如每一个都是同时继承父亲和母亲两个类,要不然你的身体里怎么能留着父母的血呢,java内部类应运而生。
  • 实现事件驱动

用来开发GUI的java Swing使用了大量的内部类,主要用来响应各种事件。Swing的工作就是在事件就绪的时候执行事件,至于事件具体怎么做,这由时间决定。这里面有两个问题:1. 事件必须要用到继承2. 事件必须能访问到Swing。所以必须把事件写成内部类。

  • 闭包
  1. 内部类是面向对象的闭包,因为它不仅包括创建内部类的作用域内部类的作用域的信息,还自动拥有一个指向此外围类对象的引用,在此作用域内,内部类有权操作所有成员,包括private成员。一般使用一个库或类时,是你主动调别人家的API,这个叫call,有的时候这样不能满足需要,需要你注册(注入)你自己的程序(比如一个对象),然后让人家在合适的时候来调用你,这叫callback。
  2. 当父类和实现的接口同时出现同名函数时,你又不想父类的函数被覆盖,回调可以帮你解决这个问题。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: