Java⾯试题(六)-抽象类与接⼝的区别
抽象类与接⼝的区别,这是⼀个经常被问到⾯试题,区别主要有以下⼏点,我们可以从⼏个⽅⾯进⾏分析:
(⼀) 继承⽅⾯:
(1) 抽象类只能单继承;接⼝可以多实现
(⼆) 成员属性⽅⾯:
(1) 抽象类中可以有普通属性,也可以有常量
(2) 接⼝中的成员变量全部默认是常量,使⽤public static final修饰,这个可以省略不写
(三) 代码块⽅⾯:
(1) 抽象类可以含初始化块;接⼝不能含初始化块
(四) 构造函数⽅⾯:
(1) 接⼝不能有构造函数抽象类的使用
(2) 抽象类可以有构函数,但是这⾥的构造函数不是⽤来创建对象的,⽽且⽤来被实现类调⽤进⾏初始化操作的
(五) ⽅法⽅⾯:
(1) 接⼝⾥⾯不能定义静态⽅法;抽象类⾥⾯可以定义静态⽅法
(2) 接⼝⾥⾯只能是抽象⽅法;抽象类⾥⾯可以有抽象⽅法也可以有普通⽅法
上⾯就是接⼝与抽象类的区别,在说完区别之后,我们可以补充⼀下接⼝与抽象类之间的相同之处:
(1) 接⼝与抽象类都不能被实例化,需要被其他进⾏实现或继承
(2) 接⼝与抽象类⾥⾯都能包含抽象⽅法,实现接⼝或继承抽象类的⼦类都必须实现这些抽象⽅法
针对相同之处的第⼆点,我再细说⼀下
(⼀) 超类是接⼝:
(1) 如果使⽤接⼝继承(extends,⽆法使⽤implements)这个接⼝,那么在这个⼦类接⼝中,可以实现其⽗类接⼝中的抽象⽅法(这种⽅法我从没看见过,但是在今天的⾯试中,⾯试官问我接⼝中是否可
以有具体的实现⽅法,可以将这种情况举出来)
(2) 如果使⽤抽象类实现这个接⼝,可以在这个⼦类抽象类中实现⽗类接⼝中的抽象⽅法
(3) 如果使⽤具体类实现这个接⼝,那么就必须实现⽗类接⼝中的所有抽象⽅法
(⼆) 超类是抽象类:
(1) 接⼝不能继承抽象类
(2) 如果使⽤抽象类继承这个抽象类,可以在这个⼦类抽象类中实现⽗类接⼝中的抽象⽅法
(3) 如果使⽤具体类继承这个抽象类,那么就必须实现⽗类抽象类中的所有抽象⽅法
对于上⾯的说明,所以在相同之处的第⼆点处主要是针对具体类继承抽象类或实现接⼝来说的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。