• 抽象类和接口的区别


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

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

    接口

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

    区别:

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

    接口和抽象类的相同点

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

    PS:

    • 静态方法不能被重写,不能被抽象
    • 本地方法是本地代码实现的方法,不能是抽象
    • synchronize与方法的实现细节有关,抽象方法不能被synchronize修饰
    • 抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法。而接口中只是对方法的申明和常量的定义。
  • 相关阅读:
    关于WPF的2000件事 01--WPF是什么?
    生产力
    读书笔记-WPF资源、样式、模板
    泛型
    WebAPI Post方法接收的FromBody一直为null
    第一讲 从头开始做一个web qq 机器人,第一步获取smart qq二维码
    .net dll反编译出现的问题,以及部分修复的方法
    以太坊中私有链的搭建
    java.. C# 使用AES加密互解 采用AES-128-ECB加密模式
    还原数据库出错 解决3154
  • 原文地址:https://www.cnblogs.com/heyjia/p/11338365.html
Copyright © 2020-2023  润新知