抽象类和接口的异同点

面试抽象类和接口的区别

相同点:

1、都是抽象的,不能被实例化

2、当一个非抽象类实现接口或者抽象类的时候,必须将接口和抽象类中所有的抽象方法全部实现

不同点:

1、接口(行为)是完全抽象的,接口侧重于封装,抽象侧重于提取共性,进行约束

抽象类是半抽象的,提取共性 ,提取共同点

2、实现接口的关键字为 implements,继承抽象类的关键字为 extends,接口和接口支持多继承,类和类之间支持单继承,一个类也可以实现多个接口,但一个类只能继承一个抽象类

3、接口只有定义,不能有方法的实现,而抽象类可以有定义与实现,即其方法可以在抽象类中被实现。

4、抽象类有构造方法,接口没有构造方法

5、接口是完全抽象的,所以接口中随便写一个变量就是常量(public static final),随便定义一个方法都是抽象方法public abstract(只是省去了前面的修饰符)

而抽象类可以有自己的数据成员变量,也可以有非抽象的成员方法、可以被定义为pirvate,protected和public,抽象类中的抽象方法·(其前有abstract修饰)不能用private,static,synchronized和native等访问修饰符修饰,同时方法必须以分号结尾,并且不带花括号{}。所以,当功能需要累积时,使用抽象类;不需要累积时,使用接口。

6、接口被运用于实现比较常用的功能,便于日后维护或者添加删除方法,而抽象类更倾向于充当公共类的角色,不适用于日后重新对里面的代码进行修改。

7、接口可以使用多态--面向接口编程

8、接口有没有默认方法?有!可以为接口方法提供一个默认实现。 必须用 default 修饰符标记这样一个方法。当然, 这并没有太大用处, 因为Comparable接口 的每一个实际实现都要覆盖这个方法。

接口方法的冲突

1、 一个类实现两个接口,两个接口的方法都一样可以吗?可以!

  但是如果两个方法的名称一样,但是两个方法的参数不一样可以吗? 可以,就是方法的重载,再重载一个带参数方法就行了
​
  但是如果两个方法的名称一样,但是两个方法的返回值类型不一样可以吗? 不可以!

2、如果先在一个接口中将一个方法定义为默认方法, 然后又在超类中定义了同样的方法, 会发生什么情况?

超类优先。如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值