【问题标题】:why we can't implement methods from interface to abstract class, without modifying "public"?为什么我们不能在不修改“public”的情况下实现从接口到抽象类的方法?
【发布时间】:2019-07-15 05:01:34
【问题描述】:

界面:

interface MasterPlan{
    void getRate();
}

抽象类:

abstract class Plan implements MasterPlan{
    abstract void getRate();
} }

在这种情况下,如果在getRate() 方法中不使用public 修饰符,我将无法实现MasterPlan 接口。

public abstract void getRate();

这是正常行为。

我知道接口中的默认修饰符是default。在实现的抽象类中没有public 修饰符出现此错误的原因是什么?

【问题讨论】:

  • "我知道默认修饰符在接口中是"默认"。" ...那么你的知识是有缺陷的。接口中的默认修饰符是“public”。这个问题甚至证明了这一点。
  • 接口中定义的方法必须通过契约公开。
  • class 中,缺少“public”(或private)访问修饰符本身就是访问声明:它声明方法具有包-私人访问。即使方法声明恰好实现了接口的方法,该行为也不会改变。所以你必须像写任何其他公共方法一样写public。而且因为您正在实现一个接口方法,它确实必须是公开的。
  • Tom and deHaar,是的,明白了。它是“公开的”。不是“默认”。谢谢:)

标签: java interface abstract-class access-modifiers


【解决方案1】:

接口中的所有抽象、默认和静态方法都是隐式公开的。

interface 具有具有隐式属性的方法,并且一旦在定义或实现该方法之后声明该方法,就无法更改它的访问修饰符。

或者你可以将你的类声明为私有、受保护等。

oracle document defining interfaces

你可以要求更热心的帮助。

【讨论】:

    【解决方案2】:

    您面临Interface 中的每个方法都是public 的问题。因此,如果您有一个实现Interfaceabstract 类,那么其中的方法就是public。您无法更改已定义方法的可见性。

    【讨论】:

    • 是的。它是“公开的”。不是“默认”。谢谢:)
    猜你喜欢
    • 2022-07-22
    • 2013-06-09
    • 2013-02-15
    • 2016-06-11
    • 2014-03-18
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    相关资源
    最近更新 更多