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

         

          内部类,是java中“哇”的特性之一。为什么说它是"哇“,因为每个刚接触的人都一定会说,”哇!“,怎么会有这种奇怪的东西。是的,这的确是一个令人会”哇"的东西,更重要的是,它并不是语言设计者在语言设计上的一个小花招,它的出现,是为了解决java中如何更好的实现多重继承但是又不会出现C++中出现的一些麻烦,而且也确实很好的解决了这个问题。
            C++的多重继承是很难用的东西,因为很难保证它的继承行为不会带来问题,尤其是继承的层次越多,就越会出现问题。java作为C++的继承者,自然也在这方面做了非常大的努力,毕竟多重继承的作用依然是相当吸引人的,是不能随便放弃的。
            再次强调,这篇文章并不是扫盲。因为我本人是新手,对java这门语言的认识相当浅陋,所以自然不能像大牛一样,能够将一些复杂的东西讲的通俗易懂,也不能将一些简单的东西讲的生动有趣,所以,我的文章,都是针对我在学习中遇到的具体问题而进行的具体分析,泛泛而谈之类的东西,抱歉,我还没那样的实力做到随手拈来。
            那么,接下来就开始进入正题。
            为什么需要内部类?
            这个问题已经涉及到内部类的设计意义,前面已经讲过,内部类可以解决多重继承的问题,这里就再重新将这个问题用另一种说法解释:每个内部类都可以独立的继承自一个接口的实现,无论外围类是否已经继承了某个接口的实现,对于内部类都没有什么影响。什么意思呢?就是说,就算外围类已经是某个接口的实现或者继承某个接口的实现,内部类依然可以实现其他接口或者继承接口的实现类,但是彼此间又不会相互影响。这样的话,我们就可以在一个类中实现对于多个类的继承但是又不会像C++那样产生令人头疼的问题,多重继承借助内部类得到很好的解决,尤其是抽象类或者具体类的多重继承,就只能用内部类。提到继承的问题,自然就会衍生一个很显眼的问题,内部类能否被覆写?因为内部类在层次上和外围类的方法一样,既然方法可以被覆写,内部类呢?答案是不行。因为那已经不是覆写,而是导出类自己的内部类了,根本说不上什么覆写。所以,人们就会将内部类用在这样的情况,想要一个继承自某个类的类,实现某个接口同名的方法,因为会覆写,所以用内部类来独立实现该接口,就不会发生覆写。最好是能有一个方法将内部类向上转型为接口被其他类回调,而且获得此接口的引用的类,只能回调接口内的方法,不能使用外围类的其他成员。这样就能实现细节的完全隐藏了。
          
  • 相关阅读:
    你所知道的微服务技术栈有哪些?请列举一二
    Spring Cloud核心组件,在微服务架构中,分别扮演的角色:
    两种跳转方式分别是什么?有什么区别?
    forward 和redirect的区别 ?
    Request对象的主要方法:
    Struts2 的封装方式有哪些?
    使用继承有什么好处?
    当数据需要进行大量更改时, String和StringBuffer谁是更好的选择?
    数组和向量之间有什么区别?
    启动一个线程是调用run()还是start()方法?
  • 原文地址:https://www.cnblogs.com/wenjiang/p/2660479.html
Copyright © 2011-2022 走看看