zoukankan      html  css  js  c++  java
  • 对于 抽象类 接口 的理解

    1. 一个子类implements一个接口,如果该子类是非abstract类,就必须实现接口中的所有方法(不管是否需要);而如果该子类是abstract类

    ,则可以实现接口的中方法也可以不实现。
       一个子类如果是继承一个抽象类,如果该子类是非abstract类,就必须实现基类中的所有抽象方法;而如果该子类是abstract类,则可以实

    现基类的中抽象方法也可以不实现。
       //这两种情况看起来是一样的,只不过,抽象类中可以有非抽象方法,而接口中必须全是抽象方法。

    2. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类显然将无法通过编译,因为接口的那个改名的方法在非抽象子类中没有实

    现。
       抽象类如果修改了一个抽象方法的名称,子类同样编译不过,但若修改的是非抽象方法,编译没有问题。
       //两者看起来看是差不多的,只不过修改的方法有抽象和非抽象之别。

    3. 关于
       抽象类如果修改了一个抽象方法的名称,子类同样编译不过,如果修改的是非抽象方法,编译没有问题,这个不确定性恰恰是抽象类的致命

    弱点。

    --------------------------------

       怎么会无法通过呢?初始名为aaa ,子类继承来了aaa的方法,当抽象类的aaa改为bbb后,子类就拥有了aaa,和bbb两个方法

       //初始名为aaa(应为抽象方法名),子类继承(并实现)了aaa的方法,当抽象类的aaa改为bbb后,子类就拥有了aaa,和bbb两个方法(子

    类这时只是拥有了一个新方法aaa,而抽象类的的抽象方法bbb在子类中没有实现,当然无法编译通过)
    ----------------------------------------
    我发现大家对接口的理解太过片面了,接口可以这样理解:它并不仅仅是一个类,它是一个规范~~~

    就象是一个系统,不断有旧的成员被新的成员取代,但系统仍然可以良好运转,为什么?就是因为所以的成员都遵守一个让系统正常运行的规范,在软件中,接口就扮演着这样一个角色,它并没有代替成员做具体的工作(coding)而是告诉成员该如何做(接口中的方法)

    再详细一些说就是接口中的方法只定义了参数类型,返回值类型,方法名字,就是告诉成员用什么样的工具(方法名)用什么资源(参数类型)完成什么样的工作(返回值类型)

    基于这样的出发点,几个毫不相干的抽象类甚至可以公用一个接口,即接口规范着抽象类

    这就是接口最主要的作用,通过接口耦合的系统有更好的整体性和可维护性,可扩展性
    -----------------------------------------
    但是接口会在无形中至少增加一个类,如果再加上一个抽象隔离的话,就多出来两个。如果其他人也理解这种模式还凑合,如果其他人不理解呢?那就大幅度的增加了类结构图的复杂度(系统初期一般类的数量本来是不多的)。
    ----------------------------------------
    以为使用接口和抽象类会减少代码量就是另外一个误区

    一个依赖抽象层的系统在开发过程中,难免会在抽象层和实现层中改来改去,工作量甚至会成倍的增加
    这样的系统在后期的维护与再次开发中的好处却是明显的,要做的改动会少很多也会更容易些,很多人都有这样的经验:当为某个程序加上一个功能的时候,突然间发现其他的某个功能不好使了,如果一个抽象层设计良好的系统是不会出现这样的情况的,但这就要取决与设计抽象层之前对可能发生情况的预测是否全面,否则既改接口又改代码无疑是一场噩梦,这是设计者经验多寡的问题。

    这些都是我目前对接口的理解,让我具体举一些例子我也举不出来,只可意会不可言传,大家可以记住我说的这些在以后做项目的过程中体会一下
    ---------------------------------
    其实我个人认为,我们在进行OO设计的时候,我们分析得越细致就越提高了我们代码使用的精密性。这时候,我们必须对所有的框架有个详细了解才能开始。这是一种很不好的用户体验。
    --------------------------------
    大部分新人很难做到理论指导实践的,所以对于新人来说,想用什么就用什么好了。。。保证程序能转就行。等到实践多了,觉得这样写程序开始难受了,自然就会去思考为什么会难受。。如果一直都不觉得难受,也就这样了。。

    蝗虫的大腿--windows phone 平台的坚定支持者!

  • 相关阅读:
    应用js改变问章字体大小
    在北京实习的日子
    php算法
    SQL Server 查询处理中的各个阶段(SQL执行顺序)
    130 个你需要了解的 vim 命令
    分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
    使用apache自带日志分割模块rotatelogs,分割日志
    centos下lvs配置
    分享codeigniter框架,在zend studio 环境下的代码提示
    vi 常用命令
  • 原文地址:https://www.cnblogs.com/beyoung/p/1035558.html
Copyright © 2011-2022 走看看