招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章“Java 面试题:写一个字符串的反转”所说:

面试开发人员不仅辛苦而且乏味,当然也有一些极好的参考,如:Joel Guerilla Guide  to interviewing,但是最后录用与否你来决定。为了快速了解他们的编程能力,我已经想好要问他们字符串反转的问题。

除了字符串反转的问题外,还有一道好题。

Java是否支持多重继承?

好了,很明显传统意义上Java并没有多继承,所以正确的答案应该是:“没有”或者“有,但是”或者“没有,但是”。单从这点就可以探索出不同的方法来。通常我会问“是否因Java语言的设计者笨到没法实现多重继承”作为我们话题的开始,为什么C++那帮家伙实现了呢?我主要以菱形继承问题来说明:

在面向对象的编程语言中总伴随着多重继承及组织的理解。菱形继承问题就是在如下情景时出现含糊不清的情况:当两个类B和C继承自A,类D同时继承自B和C,如果D中的一个方法调用一个在A中定义的方法(不是覆盖方法).而B和C分别用不同地方式重写(overridden)了方法,那么这个方法到底是继承的哪个类呢,B还是C?

另一探索性的方法是:Java怎么模拟“多重继承”?我想答案已经浮出水面了,就是接口(Interface)。我们经常在Java中讨论接口,那么应试者在什么时候,怎么使用接口的呢?使用接口又有什么好处呢?应试者是否喜欢使用接口?我可以检测他对建模有多熟练,有时还会让他针对接口画画图。我们继续谈论Java中接口的问题,当两个接口有相同的静态域(field),有一个类实现了Java中所谓的“多继承”的两个接口时会出现什么情况?

public interface I1 {

String NAME = "codemonkeyism";

}

public interface I2 {

String NAME = "stephan";

}

public class C implements I1, I2 {

public static void main(String[] args) {

System.out.println(NAME);

}

}

Java坚持了他们的做法,语言的设计者决定不让其编译通过。

C.java:3: reference to NAME is ambiguous, both variable NAME
in I1 and variable NAME in I2 match
System.out.println(NAME);
^
1 error

还有更多的方法和我们的应试者去探讨多继承的问题,例如:接口中方法的修饰符是什么?对于菱形继承问题使用traits实现混合结构是否比使用接口更好,还是和多继承一样的糟糕?正如我不在那么钟爱继承一样,大量使用继承是一种代码异味。我们还可以和应试者讨论继承的负面因素—–重耦合的例子。

为什么会有这问题?

我为什么会问这个问题呢,从这个问题中又学到了什么?继承在面向对象(OO)中是很基础的概念,是每个Java程序员都应该理解的概念。同时也是他反映到工作中,理解超出语法层面的另一个基本的特性。所以对于多继承问题,我喜欢那些可以引出很多可以探讨与思考的问题。这个继承问题只是多继承、语言设计、代码味道、解决方案、接口、基于角色的开发等众多问题中的一种而已。

英文原文:Codemonkeyism,编译:ImportNew - 刘志军

译文链接: http://www.importnew.com/567.html

Java面试题:多继承的更多相关文章

  1. Java面试题之继承、组合、聚合有什么区别

    继承:他是is-a的关系,指一个类继承另外一个类的功能 例如:public class A extends B { } 聚合:他是has-a 例如:public class A{ List<B& ...

  2. 【转】Java面试题:多继承

    招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章“Java 面试题:写一个字符串的反转”所说: 面试开发人员不仅辛苦而且乏 ...

  3. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  4. Java:类与继承

    Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...

  5. java面试题及答案(转载)

    JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时 ...

  6. 115个Java面试题和答案——终极列表(上)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  7. 115个Java面试题和答案——终极列表(下)

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...

  8. Java面试题(全)

    JAVA部分 什么是反射机制?反射机制应用(Struts中反射机制的应用) 答:运行状态中,对于任意一个类,都可以知道它的所有属性和方法,对于任意一个对象都可以调用它的任意一个方法,这种动态获取信息以 ...

  9. Java面试题大全(四)

    JAVA代码查错 1. abstract class Name { private String name; public abstract boolean isStupidName(String n ...

随机推荐

  1. tendermint 跟tikv结合

    import ( "fmt" "github.com/allegro/bigcache" "github.com/kooksee/usmint/cmn ...

  2. spring mvc 详细配置

    转自: http://www.cnblogs.com/superjt/p/3309255.html 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是 ...

  3. js操作对象属性值为字符串

    今天在项目开发中遇到一个没遇到过的问题,这个问题是需要对比两个对象a和b,a是一个只有一个属性的对象,b是一个含有多个属性对象,如果b中包含和a一模一样的属性名和值,则把这个一样的属性和值从b中删除了 ...

  4. Thunder团队第七周 - Scrum会议5

    Scrum会议5 小组名称:Thunder 项目名称:i阅app Scrum Master:邹双黛 工作照片: 宋雨沉迷于照相无法自拔,所以不在相片中. 参会成员: 王航:http://www.cnb ...

  5. 希尔排序(java实现)

    上篇blog中介绍的直接插入排序,希尔排序就是对直接插入排序的一个优化.比如有这么一种情况:对一个无序数组进行从小到大的排序,但是数组的最后一个位置的数是最小的,我们要把它挪到第一个位置,其他位置的都 ...

  6. NumPy常用函数总结

    转载:https://www.cnblogs.com/hd-chenwei/p/6832732.html NumPy库总包含两种基本的数据类型:矩阵和数组,矩阵的使用类似Matlab,本实例用得多的是 ...

  7. 按照Right-BICEP要求设计四则运算3程序的单元测试用例

    按照Right-BICEP要求: Right——结果是否正确? B——是否所有的边界条件都是正确的? I——能查一下反响关联吗? C——能用其它手段交叉检查一下吗? E——你是否可以强制错误条件发生? ...

  8. 【BioCode】根据seq与位点信息截取窗口

    代码说明 sequence24371.txt 以上为所有氨基酸的编号,序列,与位点标记.根据标记为“1”的位点,截取窗口:如下(实验结果): 图示为一个窗口为12的蛋白质片段 2N+1=25: 实现代 ...

  9. TP中CURD操作

    CURD操作 CURD操作也就是模型操作数据表的基本操作.C(Create).U(Update).R(Read).D(Delete)操作就是增删改查操作. 6.1.增加操作 回想一下在mysql中增加 ...

  10. Vue.js checkbox 练习

    <div id="app"> <input type=" />足球 <input type=" />篮球 <input ...