小说复用类

前言

第一次尝试写技术文章,前期可能主要是一些总结类的。后期才会慢慢加入自己的理解吧。主要内容来自于 Thinking in Java

组合

组合的意思很简单,就是 has-a 的关系,也就是说有什么东西。举个例子,一辆汽车里面需要有座椅,这个座椅我不必“从头设计”,可以直接从“座椅”分类里面拿来用就是了,同样的一个座椅,我可以用在捷达车上,也可以用在桑塔纳上,这就是组合了。

继承

熟悉 OOP 的同学想必都说烂了吧,一只鸡也是一只鸟,有翅膀,会下蛋等等。这就是继承了。但是这个例子其实不好,因为我很难去“实例话”一只鸡。举个更好的例子可能还是汽车。嗯,只要把“帕萨特”稍微修改一下就变成了“辉腾”。这个可能就更像是继承的意思了。(其实辉腾是辆好车,内部特别宽敞。顺便黑一下大众的车型。)
继承中子类拥有父类的“全部”(除了private 的)特征。你可以直接调用父类的函数。但是你不能“重载”父类的private 方法,你可以写一个跟父类拥有同样名字的private 方法,但是它们之间只是正好重名了而已,可以完全不相关。

class Car{
    private void drive(){
        System.out.println("The car is drived.")
        }
    }

public class Honda extends Car{
    Honda (){
        System.out.println("This is child");
    }
    private void drive(){
        System.out.println("Honda is cheap.");
    }
}
代理

第一次接触到这个概念的时候我有点奇怪,因为它看起来跟组合实在是没什么太大的差异。
然后…… 我又仔细看了一遍,原来区别在于“是否暴露代理对象的方法”。当然,这是书上看来的,在我开来这里的暴露,其实还不如说是一种“封装”。也就是我可以直接用新类中的方法,而不是通过调用该类中的子对象的方法。这句话说起来有点绕。还是用前面椅子和车子的例子,同样是一把椅子,如果我用椅子自带的手柄来调整座椅,那么就是组合。如果我把这手柄跟电子系统连起来,用车上的电子系统来调整座椅,那么就是代理了。也就是说我通过“代理人”来操作对象就是代理,如果我直接操作就是组合。

总结

不管是代理,继承还是组合都是我们代码复用的方式你完全可以组合使用,而不是单一的认准某一种方式。 大家都知道继承是OOP中十分重要的概念,但是继承其实并不是最好的代码复用方式。因为“耦合性”的问题,关于耦合性我还不是特别清楚,可以留着以后来慢慢说。
最好只在有“向上转型”(upcasting)的必要的时候再使用继承。在安卓中常用的例子就是 findViewById() 方法了,所有需要注册的组建都继承自View类,这样我们就可以用统一的方法把它们找出来。当然随着工程的增大,写findViewById()也是挺烦人的,所有才有了ButterKnife 这样的库来方便我们的工程。

好了今天的内容就到这里吧,其实就是炒炒冷饭,大家都懂得,我只是拿来教自己一遍。欢迎拍砖,谢谢指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,337评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,906评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,441评论 11 349
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 12,737评论 3 93
  • •))) 20" 终于明白!你就是为了你自己的野心, 你想过上不一样的生活,你就是想剧烈,你就是想折腾,你就是想告...
    chensir740阅读 9,855评论 0 23