经典回答
接口和抽象是Java 面向对象设计的两个基础机制。
接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API 和实现分离的目的。它不包含任何非常量的变量,同时没有方法实现。JDK1.8 后引入的default 后可以。用关键字implements 实现。
抽象类是不能实例化的类,用关键字abstract 修饰,其主要目的是代码重用。除了不能实例化,形式上和一般的 Java 类并没有太大区别,可以有一个或者多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取相关 Java 类的共用方法实现或者是共同成员变量,然后通过继承的方式达到代码复用的目的。
一个类可以单继承多实现。
以下为网上摘取的不同点:
考点分析
接口和抽象的区别是面试中经常问到的考点。虽然很简单,但是往深了想其实还是有很多值得我们在意的地方。主要是设计方面的问题。
考点一:Java 为什么是单继承多实现?
我们都知道C++ 可以实现多继承。但是多继承会出现菱形继承的问题:A 类实现了一个方法,B、C类分别继承与A 并重写了这个方法,D 类继承B、C 但是不知到该调用谁的方法。虽然C++ 提供了解决办法(好像是虚继承),但是还是不方便。Java 因此摒弃了多继承。
为什么可以多实现呢?首先接口不可能出现菱形继承关系:A 接口被B、C 类实现,D 因为单继承只能选择一个来进行继