java中extends和implements的执行顺序是怎样的?

如果class C extends B implements A {} 的话,程序在执行的时候,C类是会先继承B再去实现A接口,还是先实现A接口再继承B父类呢?如果把implements放在extends前面的话,那执行顺序是不是又会发生变化呢?最好举例说明。

这一点不需要在程序执行时,而是在程序被编译的时候就定下来了。

class C extends B implements A表示扩展了B类的C类必须实现了A接口,否则编译时就会出错,根本轮不到执行。追问

在编译的时候extends和implements 肯定有个先后顺序吧?不可能同时发生的。就像一个类中如果是平级关系的话就按代码顺序来执行一样。

追答

要是硬说有顺序的话,那可以说extends在implements前面。也就是说编译器检查这个类是否实现了A接口,是检查整个继承了B类的C类,而不是一个不完整的C类。

但是这么说其实是没有必要的,因为继承类和实现接口是两个范畴里的事,哪个在哪个前面也不影响实际的效果。你如果觉得不是这样,可以举个具体的例子,觉得顺序不同会产生实际不同的效果的,我们再讨论。

追问

实现这个接口就要重写它里面的方法。所以假如接口在先,那么C类里面就必须要重写A接口里面的方法。假如继承在先,那我就可以在B类里重写C类的方法,C类里就不用重写了。不知道我这么认为对不对?

追答

这就是我前面说的,要是硬说有顺序的话,那可以说extends在implements前面。说C类实现了接口A,永远都是把继承了B类的C类看作一个整体来看,看它是不是实现了接口A。并没有一个脱离了B类的C类存在。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-08-26
继承和接口都是在引用的时候,都在类里实现了,至于你说的放在前后,那还分什么先后顺序的,Java的格式规范就是这样,类先执行的是构造函数,如果用到父类的构造函数,但构造函数也可能有多个,所以你说我都不知道怎么回答!
相似回答