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

      这个没啥说的

  • 相关阅读:
    Linux的inode的理解
    linux中ctrl+z和ctrl+c的区别
    linux后台运行和关闭、查看后台任务
    解决Could not get lock /var/cache/apt/archives/lock
    Spring Boot 2.1.5 正式发布,1.5.x 即将结束使命!
    【免费】某平台16980元编程课程资料下载,仅此1次
    秒杀系统架构分析与实战,一文带你搞懂秒杀架构!
    阿里数据库大牛的 MySQL 学习指南!
    Intellij IDEA 撸码最头大的问题。。
    Java 中的 SPI 机制是什么鬼?高级 Java 必须掌握!
  • 原文地址:https://www.cnblogs.com/yb38156/p/9547733.html
Copyright © 2011-2022 走看看