如果class C extends B implements A {} 的话,程序在执行的时候,C类是会先继承B再去实现A接口,还是先实现A接口再继承B父类呢?如果把implements放在extends前面的话,那执行顺序是不是又会发生变化呢?最好举例说明。
在编译的时候extends和implements 肯定有个先后顺序吧?不可能同时发生的。就像一个类中如果是平级关系的话就按代码顺序来执行一样。
追答要是硬说有顺序的话,那可以说extends在implements前面。也就是说编译器检查这个类是否实现了A接口,是检查整个继承了B类的C类,而不是一个不完整的C类。
但是这么说其实是没有必要的,因为继承类和实现接口是两个范畴里的事,哪个在哪个前面也不影响实际的效果。你如果觉得不是这样,可以举个具体的例子,觉得顺序不同会产生实际不同的效果的,我们再讨论。
实现这个接口就要重写它里面的方法。所以假如接口在先,那么C类里面就必须要重写A接口里面的方法。假如继承在先,那我就可以在B类里重写C类的方法,C类里就不用重写了。不知道我这么认为对不对?
追答这就是我前面说的,要是硬说有顺序的话,那可以说extends在implements前面。说C类实现了接口A,永远都是把继承了B类的C类看作一个整体来看,看它是不是实现了接口A。并没有一个脱离了B类的C类存在。