抽象类和接口的异同点

面试抽象类和接口的区别

相同点:

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

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽象类和接口在C#中有以下异同点: 相同点: 1. 都不能被实例化,只能通过实现它们的子类或实现类来创建对象。 2. 子类或实现类必须实现抽象类或接口中的所有方法才能被实例化。 3. 可以被其他类继承或实现。 异同点: 1. 抽象类是特殊的类,可以包含成员变量、方法、属性等,而接口只能包含方法、属性、事件和索引器的声明。 2. 一个类只能继承一个抽象类,但可以实现多个接口。 3. 抽象类可以有方法的实现,而接口只能有方法的声明。 4. 抽象类可以有字段和构造函数,而接口不能有字段和构造函数。 5. 接口可以被其他接口继承,形成接口的继承链,而抽象类不能被继承。 总结来说,抽象类更适合用于定义一些具有共同特征的类的基类,而接口更适合用于定义一些行为的规范,使得不同的类可以实现这些规范。 #### 引用[.reference_title] - *1* [Java抽象类和接口异同点](https://blog.csdn.net/m0_64742984/article/details/124610167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C# 抽象类与接口异同](https://blog.csdn.net/Monkey_Xuan/article/details/115915086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值