Java中接口和抽象类的区别
程序员文章站
2022-05-22 11:14:29
...
下午实在敲不进去代码,刚好整理一下,面试中的经常被问道的问题????:你给我讲讲接口与抽象类的区别?
那跟着我来看看叭(基于jdk1.8版本)
看之前我们来了解一个概念,抽象方法。
何为抽象方法?抽象方法即只定义了方法的修饰符、返回值类型、方法名、参数和异常。没有具体的实现行为。例如
void fun();
interface 接口:has-a 问题
- 对方法的抽象!!!一个类可以实现多个接口。
- 一个类需要实现该接口时,需要使用到的关键字是 implements。
- 变量的默认修饰符为:public static final。 方法的默认修饰符为:public abstract(图片中有点小问题)。即接口中所有的变量都是静态的,不可以有成员变量。
- jdk1.8之后,接口中可以有默认方法和静态方法,但是静态方法是为了默认方法所使用的,外部并不能调用。故接口中,倘若要有方法的实现体并能为外部调用,必须定义时使用default关键字修饰!!!
- 接口中除了默认方法和静态方法,其他方法必须为抽象方法!!!
- 对于接口中的私有静态方法,它只能被默认方法调用或者被其他静态方法所调用。
- 接口与接口之间也可以实现 继承 ,使用的是extends关键字
abstract 抽象类:is-a 问题
- 对性质的抽象!!!一个类可以只能继承一个类。
- 继承需要使用到的关键字是 extends。
- 抽象类中可以有成员变量。
- 抽象类中可以没有抽象方法,即抽象类中的所有方法都有方法体。但是当一个类中有抽象方法和非抽象方法时,必须将类定义为抽象类。如下????
上述都是他们的区别,那他们有什么相同点吗?
那当然有呀。
- 首先他们都不能实例化对象。
- 当一个可以实例化的类- - 实现接口 / 继承抽象类- - 时,需要重写其中的抽象方法。