【问题标题】:I can't understand relationship between superclass, interface and child class if I use the same name methods in both interface and abstract class [closed]如果我在接口和抽象类中使用相同名称的方法,我无法理解超类、接口和子类之间的关系[关闭]
【发布时间】:2020-11-10 03:52:51
【问题描述】:
public interface Pet { // Pet Interface
    default void introduce() {
        System.out.println("Interface");
    } 
}

abstract public class Animal {
    public void introduce() {
        System.out.println("Animal class");
    }
}

public class Dog extends Animal implements Pet{}

现在当我在Dog 上调用introduce 方法时,实际发生了什么?

【问题讨论】:

  • Animal 中的实现将被调用。界面中的一个是默认的,这意味着如果没有其他可用,则使用它。
  • “实际发生了什么?” 您为什么不尝试一下并亲眼看看?
  • 当你尝试它会发生什么?

标签: java oop interface overriding abstract-class


【解决方案1】:

默认方法总是“最后一行”。如果类链层次结构中的任何方法(因此,这里是顶部的“Dog”,然后是 Animal,然后是 Object - 这些是层次结构中涉及的类)匹配,则始终获胜。

仅当在整个类链中找到零个方法,并且接口链恰好包含 1 个具有默认实现的方法时,才会选择那个方法。如果有多个,那么您的代码将无法编译(如果您有 class A implements B, C {} 并且 BC 定义了相同的方法并且都具有默认 impl,那么您无法编译 A 没有将该方法显式写入 A.

【讨论】:

  • 非常感谢。现在说得通了。
猜你喜欢
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 2012-03-18
  • 2015-06-27
  • 2017-06-15
  • 2012-01-29
相关资源
最近更新 更多