Java中的类是单继承的,但接口可以多继承,类也可以实现多个接口


初次看到Spring的ApplicationContext,引发如下疑问:

Question:为什么java中的类是单继承的,接口却可以多继承?

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
		MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
      ...
}

(1) java中的类是单继承的
如果一个类继承了两个类,但是这两个类中有相同的方法,那么子类调用,无法确定应该调用哪个方法。

(2) 接口可以多继承
因为接口只有抽象方法,具体方法只能由实现接口的类实现,在调用的时候始终只会调用实现类(也就是子类覆盖的方法)的方法(不存在歧义),因此即使继承的两个接口中的方法名是一样的,最终调用的时候也都是调用实现类中的那个方法,不会产生歧义;

而又因为接口只有静态的常量,但是由于静态变量是在编译期决定调用关系的,即使存在一定的冲突也会在编译时提示出错;而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此从接口的变量是来看也是可以通过的。

interface 接口名称 {
    public static final 全局常量;
    public abstract 抽象方法;
}

一个子类可以同时实现多个接口,那么实际上就摆脱了Java中的类单继承局限。

Question:interface可以implement多个interface,也可以extends多个interface,有什么区别?

其实这个问题提的本身就有不对。因为:实现多个接口指的是:子类实现多个接口,而不是说接口实现多个接口!

class 子类 implement 接口A, 接口B,..{
}

In a wordJava中的类是单继承的,但接口可以多继承,类也可以实现多个接口

note

  1. 接口extends接口可以不实现父接口中的方法,可以声明自己的新方法;
  2. 类实现接口时,一定要实现接口中声明的方法,如果接口中没有定义抽象方法则不需要;但是要注意,类实现了一个接口A,如果B是A的父接口,且B中有抽象方法,则该类必须实现A和B中的所有抽象方法;
  3. 抽象类实现接口,可以不实现接口中的抽象方法;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM