zoukankan      html  css  js  c++  java
  • 抽象类和接口的区别

    抽象类(抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法)

    • 抽象类中可以构造方法
    • 抽象类中可以存在普通属性,方法,静态属性和方法。
    • 抽象类中可以存在抽象方法。
    • 如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
    • 抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

    接口

    • 在接口中只有方法的声明,没有方法体。 (Java8 接口可以有实例方法)
    • 在接口中只有常量,因为定义的变量,在编译的时候都会默认加上 public static final (必须被初始化,不能改变)
    • 在接口中的方法,永远都被public来修饰(只能)。
    • 接口中没有构造方法,也不能实例化接口的对象。
    • 接口可以实现多继承实现
    • 接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。

    区别:

    • 接口中的所有方法都是抽象的,而抽象类中的方法可以被实现
    • 接口中的变量只能是private static final (私有静态常量),而抽象类可以包含非final的变量
    • 接口中的方法只能被public abstract修饰,而抽象类可以被public protected private 修饰
    • 接口中的方法不可以被static修饰
    • 类可以实现多个接口,而只能继承一个抽象类
    • 接口可以继承接口,但不可以继承类(普通类和抽象类)因为抽象类有可以有方法的实现等等,抽象类都可以继承
    • 非抽象类实现一个接口,必须实现它的所有方法,但抽象类的话可以实现一部分。

    接口和抽象类的相同点

    • 都可以被继承
    • 都不能被实例化
    • 都可以包含方法声明
    • 派生类必须实现未实现的方法

    PS:

    • 静态方法不能被重写,不能被抽象
    • 本地方法是本地代码实现的方法,不能是抽象
    • synchronize与方法的实现细节有关,抽象方法不能被synchronize修饰
    • 抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法。而接口中只是对方法的申明和常量的定义。
  • 相关阅读:
    性能测试之开源的性能监控软件
    POJ 2553 The Bottom of a Graph TarJan算法题解
    Spring AOP切面
    [2014.5.22][UBUNTU]Ubuntu与Windows系统时间不同步的问题
    MySQL bug:server-id默认被自己主动置为1
    [Android]Fragment源代码分析(二) 状态
    window nginx 启动无提示错误,却没有listen 80port
    Shell 命令--文件创建、搜索命令--总结自《Linux Shell 脚本攻略》
    freemarker 自己定义指令
    javascript Deferred和递归次数限制
  • 原文地址:https://www.cnblogs.com/heyjia/p/11338365.html
Copyright © 2011-2022 走看看