zoukankan      html  css  js  c++  java
  • 令人"哇"的内部类(一)内部类的设计意义

         

          内部类,是java中“哇”的特性之一。为什么说它是"哇“,因为每个刚接触的人都一定会说,”哇!“,怎么会有这种奇怪的东西。是的,这的确是一个令人会”哇"的东西,更重要的是,它并不是语言设计者在语言设计上的一个小花招,它的出现,是为了解决java中如何更好的实现多重继承但是又不会出现C++中出现的一些麻烦,而且也确实很好的解决了这个问题。
            C++的多重继承是很难用的东西,因为很难保证它的继承行为不会带来问题,尤其是继承的层次越多,就越会出现问题。java作为C++的继承者,自然也在这方面做了非常大的努力,毕竟多重继承的作用依然是相当吸引人的,是不能随便放弃的。
            再次强调,这篇文章并不是扫盲。因为我本人是新手,对java这门语言的认识相当浅陋,所以自然不能像大牛一样,能够将一些复杂的东西讲的通俗易懂,也不能将一些简单的东西讲的生动有趣,所以,我的文章,都是针对我在学习中遇到的具体问题而进行的具体分析,泛泛而谈之类的东西,抱歉,我还没那样的实力做到随手拈来。
            那么,接下来就开始进入正题。
            为什么需要内部类?
            这个问题已经涉及到内部类的设计意义,前面已经讲过,内部类可以解决多重继承的问题,这里就再重新将这个问题用另一种说法解释:每个内部类都可以独立的继承自一个接口的实现,无论外围类是否已经继承了某个接口的实现,对于内部类都没有什么影响。什么意思呢?就是说,就算外围类已经是某个接口的实现或者继承某个接口的实现,内部类依然可以实现其他接口或者继承接口的实现类,但是彼此间又不会相互影响。这样的话,我们就可以在一个类中实现对于多个类的继承但是又不会像C++那样产生令人头疼的问题,多重继承借助内部类得到很好的解决,尤其是抽象类或者具体类的多重继承,就只能用内部类。提到继承的问题,自然就会衍生一个很显眼的问题,内部类能否被覆写?因为内部类在层次上和外围类的方法一样,既然方法可以被覆写,内部类呢?答案是不行。因为那已经不是覆写,而是导出类自己的内部类了,根本说不上什么覆写。所以,人们就会将内部类用在这样的情况,想要一个继承自某个类的类,实现某个接口同名的方法,因为会覆写,所以用内部类来独立实现该接口,就不会发生覆写。最好是能有一个方法将内部类向上转型为接口被其他类回调,而且获得此接口的引用的类,只能回调接口内的方法,不能使用外围类的其他成员。这样就能实现细节的完全隐藏了。
          
  • 相关阅读:
    软件产品案例分析(团队)
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    机器学习笔记
    第一次作业
    机器学习第一个次个人作业
    软工实践个人总结
    第10组 Beta版本演示
    第10组 Beta冲刺(5/5)
    第10组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/wenjiang/p/2660479.html
Copyright © 2011-2022 走看看