0x10ve 发表于 2017-3-11 21:42:39

一枚菜鸟对于Java易混淆点的自我辨析(学习总结)

本人是软工系的老油条,看见技术区很少有比较及时的干货更新,所以产生了发帖的想法
,第一次发帖,(老鸟请飞过,忽视~~)不喜勿喷。

Java,我相信大家都很熟悉了,下面是我曾经遇到过并产生的问题。
主要解决两个问题:先列一个大纲(目的是如果有人看见大纲觉得没意思的可以跳过,忽视)~~
   问题1:Java设计模式中的适配器模式与代理模式的区别?
   问题2:Java中abstract与interface的区别?

#shao先解决问题1:
       问题1:适配器模式与代理模式的区别:
          我从两个方面来解释,
         ①.从定义上:
                  适配器模式:将一个类的接口适配成用户所期待的接口。使得原本有的类因为接口不兼容的问题而不能在一起工作的类可以通过适配器在一起工作。
                  代理   模式:为其它对象提供一种代理以控制对这个对象的访问。
            
         这里需要注意的是,适配器是因为原本的接口不兼容而又需要再一起工作这样的背景下产生;而代理的定义里面,请注意关键字 “提供”,“控制”,这里是说明代理在设计的出发点和适配器的出发点就是不一样的。代理是不希望与用户接口产生过多接触或者是不方便直接接触。
   
            ②.从代码结构上:
                  适配器模式:适配器是定义一个用户接口仅供Adapter实现,另一个目标接口是已经存在的类(注意这里是已经存在的类,而不是继承于abstract或者实现interface接口的类)
                   代理    模式:代理模式是定义一个用户接口供真是对象和代理对象同时继承实现。

#shao解决问题2:
         问题2:interface与abstract的区别?

      大家知道Java之中存在两种抽象机制,才使得Java有着强大的面向对象功能,两种都是抽象,但这两种机制有着什么区别呢?相信大家也和我一样好奇。
       首先说abstract:
               abstract类声明了方法而不去具体实现,不能在该类里有具体实例。可以创建变量,但该变量是抽象的。再者,abstract中不能有抽象静态方法,以及抽象构造函数。通过子类去实现父类abstract中的抽象方法,父类的方法可以被重写。(需要注意的是,里面的方法也可以具体实现)
       而interface呢,interface是为用户提供一个接口,接口内全部是默认为public,abstract。interface中的所有方法都是抽象的,算是abstract的一种变体吧。相对于abstract,接口中定义的变量只能是static final类型的变量。但通常不在接口处定义(下面会讲为什么)~~

       总结一下吧,abstract与interface都属于java中的抽象机制,但abstract中的方法在子类中可以用也可以不用,也可以重写。而interface中的方法继承与它的就必须实现其全部抽象方法。不能重写。一个类可以通过一次继承关系继承一个abstract类,也可以通过多重继承实现继承多个abstract类。而一个类是可以实现多个接口的。
   abstract中的方法通常是不经常改动的,interface接口类型则是常被用来定义常用功能的。

   okay~~学习笔记就到这里啦~
以上是我关于这两个问题的自我学习和总结,或许有不够透彻的地方,欢迎大家批评指正,吼吼~。

HALO530 发表于 2017-4-17 02:36:46

thx4sharing
页: [1]
查看完整版本: 一枚菜鸟对于Java易混淆点的自我辨析(学习总结)