zoukankan      html  css  js  c++  java
  • java — 抽象类和接口

      老生常谈的一个概念,很明确,不过我们多从几个角度来看下应该会有更好的理解,最近翻了下java8的某些新特性

    关于接口的新特性让笔者受惊了,下面结合下做个总结,有更新的话直接在这里更新。

    设计层面讲:

    1、抽象类类比模板,继承父类的子类们,你们至少都有了父亲的基因,还可以自己扩张,发展自己的个性

     接口更像是一种协议(约定),实现接口的子类都有自己的具体实现,但是都得遵守这个约定,譬如入参,返回等等

    2、抽象类表示一种A是B的关系;接口表示的是一种A有B的行为,书中最常用的描述,is-a 和 like-a的关系

    语法层面

    1、抽象类的成员变量可以是多种类型,接口的成员变量都是public static final的

      因此开发中常常会写一个interface把一些常量丢进去,顺便说一句,static代表只有一份,final才代表常量

      什么意思呢?static意思是说这个东西是属于类的,而不是属于类的实例的,

      final修饰的,在编译期就会丢进这个类的常量池。关于class文件的组成以及类的加载在《深入理解java虚拟机》中讲的

    非常细致,有时间我也写一篇总结下

    2、抽象类可以有方法的实现,接口中只能有抽象方法(默认public abstract)

      且慢,且慢,笔者最近看的java8的新特性,感觉世界没有秩序了,java也不再有秩序,因为新特性说了,接口中也能有

    方法的实现了,只要加一个default方法签名,叫默认方法,实现类可以默认继承,也可以覆盖掉。

    3、抽象类中允许有静态代码块和静态方法,接口不能

      看到上面一条的java8"例外",你可能又要注意了,新特性还说加了static修饰的方法,实现类都不用实现了。问题来了,

    如果两个接口都有相同的static方法,现在一个类同时去实现这2个接口,那么这个类该去"继承"谁呢?太乱了。笔者的工作

    中,目前还不敢着手这些新特性。

    4、一个类只能继承一个抽象类(单继承),但可以实现多个接口(多继承)

      这个没啥说的

  • 相关阅读:
    js操作cookies
    努力挣钱只是不希望我的爱情受到别人金钱的考验罢了
    ASP 删除字符串开始或/和末尾处指定字符(串)
    lhgdialog 窗体之间的传值
    vs2010教程开始
    打开某些网页时IE弹出安全警告
    flex 版本问题
    【jQuery插件】用于瀑布式布局(砖块)的插件jquery Masonry
    自动根据动态的intput计算值
    js日期格式“补零”
  • 原文地址:https://www.cnblogs.com/yb38156/p/9547733.html
Copyright © 2011-2022 走看看