常见的关于abstract与interface的区别的笔试题的解析

这几天,参加java工程师的笔试面试,多次被问到有关abstract与interface的区别,经上网查询,得到相关区别将近七个,为了更好的理解,现就解析下关于七个区别的由来:

区别一:抽象类可以有构造方法,而interface没有,但两者都不能自身实例化。(由于抽象类可以被其它类继承,故可以有构造方法)

区别二:抽象类中可以有普通成员变量,接口中没有普通成员变量(接口是比抽象类更为抽象的级别,旨在提供一个统一的行为,因此要是存在普通成员变量的话,则可以通过接口的实现类可以修改变量,这样就像抽象类一样了,不符合接口的规范)

区别三:一个类可以实现多个接口,但只能继承一个抽象类(点继承与面继承)

区别四:抽象类里面有普通方法和抽象方法,而接口中只有抽象方法(抽象类集合了类和抽象的概念,而接口就纯抽象)

区别五:抽象类中可以有静态方法,而接口中不能有静态方法(接口的所有方法都是抽象的,而抽象方法是没有static,有static的方法是不能override的,所以这样定义接口才有意义。)

区别六: 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public 类型的,并且默认即为public abstract类型,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final 类型,并且默认即为public static final 类型(抽象类相对于特定情况下的抽象,因此可以根据情况制定方法,静态成员变量的访问类型,但由于是为继承做服务,因此绝对不能是private,这样没有意义,而接口则是相对于程序全局来使用的,方法只能是public,至于static final 则是由于接口不能被实例化(static),并且由于接口中的方法都是抽象的,无法通过行为来影响属性字段,因此(final))




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值