创建一个类A和一个接口B,都有一个方法f()
类C继承了类A同时实现了接口B,那么类C里的f()方法是覆盖了类A里的f()还是实现了接口里的f()呢?

解决方案 »

  1.   

    覆盖了类A里的f()还是实现了接口里的f()呢?//二者均可,即使c中没有定义,也还是可以的
      

  2.   


    创建一个类A和一个接口B,都有一个方法f()
    类C继承了类A同时实现了接口B,那么类C里的f()方法是覆盖了类A里的f()还是实现了接口里的f()呢?
    经典的好问题:事实上是这样的,如果类C没有定义f()方法,它会自动从类A继承下来一个,如此既继承了类A,同时又实现了接口B,没有问题。如果类C重新定义了f()方法,那么对于类A,很明显是覆盖,对于接口B,同时又是实现。依然没有问题。但在实际的编程中,要注意这样做的风险,类A和接口B的f()含义一致吗?尽量不要有重名的现象。thinking in java 中的多态一章有相关的更精辟解释。
      

  3.   

    如果在增加一下,A类的f()抛出一个从Exception继承的异常,接口的f()也抛出一个从Exception继承的另一个异常,那么类C中的f()将抛出哪种异常?
      

  4.   

    wangnewton(逍遥派掌门)说的很全了。C中的f()抛出的异常要根据具体发生的异常来判断,产生哪个就抛出哪个。