• 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、一个类只能继承一个抽象类(单继承),但可以实现多个接口(多继承)

      这个没啥说的

  • 相关阅读:
    Http协议和Tomcat服务器
    类加载器与反射
    线程安全
    String、Stringbuffer、Stringbuilder三者之间的区别
    iOS 开发,工程中如何混合使用 ARC 和非ARC
    dll的静态调用、动态调用
    Qt安装—搭建VS2008+QT开发环境
    C++中的引用与指针的区别
    SVN分支与合并
    (补充知识)DLL 中 .DEF文件的使用
  • 原文地址:https://www.cnblogs.com/yb38156/p/9547733.html
Copyright © 2020-2023  润新知