《java编程语言 面经 思考题 》秋招
问题的答案参考了很多博客归纳整理,以及个人的思考,如果有其他见解欢迎留言讨论。
面试题1、你认为接口和抽象类有什么区别?
首先,从语法上讲,
- 抽象类中除了抽象方法,还可以有方法的实现,而接口比抽象类更加抽象,只能有抽象方法。
- 抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。
- 抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的,如果是常量的话是默认为public static final。接口中由于没有具体方法体,所以无法定义属性的set和get方法,所以它干脆把属性定义为常量,例如接口中interface geneElec{ int power = 220; void generate();} 其中power由于是在接口中,所以默认的修饰符是public static final。
从java面向对象编程语言角度为什么要设计接口和抽象类两者?抽象类是对概念的归纳,接口是对功能的归纳,两者的侧重点不一样。任何的一个类当要扩展功能时,可以通过实现多个接口,而需要将现有的类的内容归为自己所有,则采用面向对象的四大基本特征之一,继承来实现(认现有的类作儿子)。 一个类可以实现多个接口,但只能继承一个父类。
面试题2、你认为为什么接口可以多实现,类只能单继承?
从语法的角度上讲,
Java接口是行为性的,是对功能的归纳,它只是定义了某个行为名称,具体的行为的实现是集成接口的类实现的。因此就算两个接口中定义了两个名称完全相同的方法,当某个类去集成这两个接口时,类中也只会有一个相应的方法,这个方法的具体实现是这个类来进行编写的,所以并不会出现结构混乱的情况。
如果Java是可以多继承的,会存在多继承导致的的菱形继承问题。举个例子,在这里有个A类,我们又编写了两个类B类和C类,并且B类和C类分别继承了A类,并且对A类的同一个方法进行了覆盖。如果此时我们再次编写了一个D类,并且D类以多继承的方式同时