Java面试题:接口和抽象类区别

本文探讨了抽象类与接口在编程中的异同,强调了它们各自的设计目的和使用场景。抽象类主要用于代码复用,而接口则着重于约束类的行为。接口强制实现特定行为,而抽象类则允许包含普通方法和成员变量。此外,一个类只能继承一个抽象类,但可以实现多个接口。在选择使用抽象类还是接口时,关注点在于事物的本质(抽象类)还是行为(接口)。
摘要由CSDN通过智能技术生成

这道面试看起来很简单,但是回答起来还真不定能答到点上,特别是中高级程序员。一般回答是下面这样的回答:

相同点:

  • 它们都可以定义抽象方法,供子类实现;

不同点:

  • 抽象类是用来继承的,并且一个类只能继承一个抽象类;接口是用来实现,并且一个类可以实现多个接口;
  • 抽象类可以有普通的成员函数,接口中只能存在public abstract 方法(默认的就是,1.8以前的版本);
  • 抽象类可以有成员变量并且可以是各种类型;接口的成员变量只能是 public static final 类型的;

像上面的回答符合初级程序员标准,想要加分,或者体现出你的中高级水平,再加上下面几点回答,会让面试官对你更高看一眼。

  • 接口设计的目的,是对类的行为进行约束,凡事实现它的都必须要有这个行为,这是强制性的。只不过这个行为产生的过程是不一样的。例如,猫和狗都会叫,但是猫的叫声是“喵喵喵”,狗的叫声是“汪汪汪”。
  • 抽象类设计的目的,更多的是代码复用,举个简单例子,如下图,可以看到A和C重叠的部分是B,那么B就可以放在抽象类中实现,供所有子类调用,这就实现了代码复用。至于非重叠部分就由A和C自己实现。

                                                        

  • 使用场景:当你关注一个事物的本质时,就用抽象类;当你只关注事物的行为时,那就用接口;
  • 从功能上说,抽象类的功能远大于接口,但是定义抽象类是有代价的,首先每个类只能继承一个类,其次抽象类必须实现所有子类的共性。而接口相对就弱化了很多,它只是定义了一个行为,至于这个行为如何发生是不管的,并且一个类可以实现多个接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值