本文共 1015 字,大约阅读时间需要 3 分钟。
面试的时候经常遇到接口与抽象类的区别,接口与抽象类的不同使用场景等问题,本文今天就讨论这些问题。
1.我对抽象类和接口的理解
接口与抽象类的不同的典型回答如下:当然以上是久经沙场考验的答案, 如果是面试中可以这么回答,但是对于抽象类和接口的区别我还想从另一个方面来谈谈它们的差异,从对事物的抽象层级上来说,接口更加彻底。对于行为的抽象使用抽象类也可以完成相同的功能。那还需要接口干嘛呢?在很多实际的场景下,抽象行为是不能给出任何具体的实现,只能有一个规范,举例来说动物的吃这个行为我们就只能给一个规范,因为各种各样的动物吃的行为都是不一样的。这种场景下我们就需要使用接口。而抽象类中的普通方法可以有自己的实现,所以它的抽象层级较接口要低一些。
2.接口与抽象类的语法区别
参数 | 抽象类 | 接口 |
---|---|---|
默认的方法实现 | 可以有默认的方法实现,由于抽象类中可以有非抽象方法,因此在非抽象方法中可以有默认的实现 | 接口完全是抽象的。不能有方法的实现 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有抽象方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
实例化 | 不能被实例化 | 不能呗实例化 |
访问修饰符 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public |
静态方法 | 抽象类可以有静态方法和静态代码块 | 接口不能有静态方法和静态代码块 |
静态属性 | 抽象类的静态属性可以自由定义 | 接口的静态属性默认是public static final |
成员变量 | 抽象类可以有成员变量 | 接口没有成员变量 |
main方法 | 抽象方法可以有main方法并且可以运行 | 没有main方法 |
多继承 | 只能单继承 | 支持一个类实现多个接口 |
速度 | 它比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
3.接口和抽象类的使用场景
转载地址:http://bwjmb.baihongyu.com/