Java接口和抽象类如何选择!

前言 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。
抽象类 Java 提供了一个叫做抽象方法的机制,这个方法是不完整的:它只有声明没有方法体。下面是抽象方法的声明语法:

abstract void f();

【Java接口和抽象类如何选择!】包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,那么类本身也必须限定为抽象的,否则,编译器会报错。
abstract class User { abstract void f(); }

创建抽象类和抽象方法使得类的抽象性很明确,并能告知用户和编译器使用意图。抽象类同时也是一种有用的重构工具,使用它们使得我们很容易地将沿着继承层级结构上移公共方法。
接口 使用 interface 关键字创建接口。
public interface User { void f(); }

  • 多继承
Java只能继承自一个类(或抽象类),但可以实现任意多个接口。因为接口中不允许存在属性(只有静态属性,不适用),所以属性仍然只会来自单个基类或抽象类,也就是说,不会存在状态的多继承。
//多继承 interface One { default void first() { System.out.println("first"); } }interface Two { default void second() { System.out.println("second"); } }interface Three { default void third() { System.out.println("third"); } }class MI implements One, Two, Three {}

抽象类和接口 在实际开发中选择用抽象类还是用接口是一件令人困惑的事情,抽象类仍然是一个类,在创建新类时只能继承它一个。而创建类的过程中可以实现多个接口。下表做了明确的区分:
特性 接口 抽象类
组合 新类可以组合多个接口 只能继承单一抽象类
状态 不能包含属性(除了静态属性,不支持对象状态) 可以包含属性,非抽象方法可能引用这些属性
默认方法 和 抽象方法 不需要在子类中实现默认方法。默认方法可以引用其他接口的方法 必须在子类中实现抽象方法
构造器 没有构造器 可以有构造器
可见性 隐式 public 可以是 protected 或友元
总结 认为接口是好的选择,从而使用接口不用具体类,这具有诱惑性。几乎任何时候,创建类都可以替代为创建一个接口。恰当的原则是优先使用类而不是接口。从类开始,如果使用接口的必要性变得很明确,那么就重构。接口是一个伟大的工具,但它们容易被滥用。
最后的最后 为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!
Java接口和抽象类如何选择!
文章图片

    推荐阅读