接口是抽象类的延伸,是抽象类的特殊化
相同点:
都可以写抽象方法,规定了子类必须要重写的方法(所以不能有抽象构造方法和抽象静态方法);
为什么不能有抽象构造方法:构造方法是类实例化时的构造过程,而抽象类不能被实例化,两者矛盾,所以不存在抽象构造方法。
为什么不能有抽象静态方法:抽象方法是专用于继承来实现的,而静态方法可以被类及其对象调用,不能被继承,两者矛盾,所以不存在抽象静态方法。
都不能被实例化,所以不能创建实例对象(由于没有对应的具体概念);【可以用new 接口(){}的方法来当做匿名类,把方法作为参数来进行传递,注:这不是实例化】
不同点(语法):
抽象类是对类抽象,而接口是对行为抽象;
抽象类只能继承一个,而接口可以实现多个;
抽象类中可以有非抽象方法,而接口中只能有抽象方法(JDK1.8开始,接口中可以通过default关键字来定义非抽象方法,解决扩展问题);
抽象类中可以有成员变量和属性,而接口中只能有由static final修饰的常量;
抽象类有构造方法(为子类准备),而接口没有构造方法;
不同点(应用):
抽象类在代码实现方面发挥作用,可以实现代码的重用;而接口更多的是在系统架构方面发挥作用,主要用于定义模块之间的通信契约。
原文地址:https://www.cnblogs.com/hong-yu0415/p/9108717.html
时间: 2024-10-27 13:48:44