【问题标题】:Transform instance method to abstract method when overriding重写时将实例方法转换为抽象方法
【发布时间】:2024-01-03 05:13:01
【问题描述】:

我在 Java SE 规范中阅读了以下内容,但并未完全理解: link

例如,如果一个类声明了两个同名的公共方法,而一个子类覆盖了其中一个,则该子类仍会继承另一个方法。

如果在类中声明了未继承的方法,或者在接口中声明了未继承的方法并且新声明是抽象的,则称新声明覆盖了它。

难道不是符合这种情况吗?

public class Parent{

    public void method(){
        System.out.println("Call inside parent class");
    }
}

public abstract class Child extends Parent{

    public abstract void method();
}

你能澄清一下吗?这是压倒一切的吗?

【问题讨论】:

  • 为什么不使用@Override 让编译器回答?

标签: java inheritance methods abstract overriding


【解决方案1】:

这两个句子并没有特别的关联:第一个只是给前一句举例。

这种情况与第二句匹配,但与第一句不匹配,因此这是一个覆盖而不是实现或隐藏的示例。

第一句话的例子是

public class Parent {
    public void method() {
        System.out.println("Call inside parent class");
    }

    public void method(int i) {
        System.out.println("Call method(int) inside parent class");
    }
}

public class Child extends Parent{
    public void method() {
    }
}

这里,Child 覆盖method() 并继承method(int i),因此如果您调用new Child().method(0),字符串将被打印出来。

【讨论】:

  • 是的,我只是发布了第一句话,以便您可以知道第二句话中的“方法未继承”声明是指什么