当前位置: 首页 > 知识库问答 >
问题:

我可以实现私有或受保护的Java接口方法吗?[复制]

花和宜
2023-03-14

是否可以实现一个接口,然后在重写方法时,使方法私有或受保护?

共有2个答案

仲皓君
2023-03-14

不,你不能,因为有一些规则(更多细节在这里提到):

在java中,方法只能在子类中编写,不能在同一个类中编写。

参数列表应与重写方法的参数列表完全相同。

返回类型应与在超类的原始重写方法中声明的返回类型相同或是其子类型。

访问级别不能比被覆盖方法的访问级别更具限制性。例如:如果超类方法被声明为公共的,那么子类中的over-ridding方法既不能是私有的,也不能是受保护的。

仅当实例方法由子类继承时,才可以重写它们。

不能重写声明为final的方法。

声明为static的方法不能被重写,但可以重新声明。

如果无法继承方法,则无法重写该方法。

与实例的超类位于同一个包中的子类可以重写任何未声明为私有或最终的超类方法。

不同包中的子类只能覆盖声明为公共或受保护的非最终方法。

重写方法可以引发任何未选中的异常,无论被重写的方法是否引发异常。

但是,重写方法不应抛出新的或比被重写方法声明的异常范围更广的已检查异常。重写方法可以引发比重写方法更窄或更少的异常。

不能重写构造函数。

金霄
2023-03-14

默认情况下,接口方法是公共的(即使没有明确指定)。因此,实现接口方法的任何方法也必须是公共的,因为不能降低方法的可见性。

原因:

假设您有一个接口:

public interface SomeInterface {
    public int someMethod();
}

现在您实现接口:

public class SomeClass implements SomeInterface {
    public int someMethod() {
        return 1;
    }
}

您可以按如下方式使用它:

SomeInterface inter = new SomeClass();
int result = inter.someMethod();

现在,如果您将实现类中的部件方法()的访问级别更改为受保护的私有,它将不再可以从外部类访问(例如,in将无法从属于不同包且不扩展部件类的类访问)。但是,由于部件类实现了部件接口,并且接口的方法是public,因此它必须是可访问的。

 类似资料:
  • 问题内容: 为什么定义中的所有方法都是隐式的?为什么不允许使用方法? 问题答案: 因为接口应该表示“您可以在课堂外看到的东西”。添加非公共方法是没有意义的。

  • 问题内容: 可以将方法指定为私有方法还是受保护方法? 会编译吗? 它会运行吗? 问题答案: 它会编译,不会运行(使用Eclipse测试)。

  • 面向对象编程最重要的原则之一 —— 将内部接口与外部接口分隔开来。 在开发比 “hello world” 应用程序更复杂的东西时,这是“必须”遵守的做法。 为了理解这一点,让我们脱离开发过程,把目光转向现实世界。 通常,我们使用的设备都非常复杂。但是,将内部接口与外部接口分隔开来可以让我们使用它们且没有任何问题。 一个现实生活中的例子 例如,一个咖啡机。从外面看很简单:一个按钮,一个显示器,几个洞

  • 问题内容: 我知道我可以使用反射来调用私有方法,并获取或设置私有变量的值,但是我想重写一个方法。 我希望方法 可以打印出来,但是可以打印出来。我听说这可以通过反思来完成,但是我不知道怎么做。如果不是反思,有谁知道另一种方式吗?(除了使方法受保护,或者将方法复制并粘贴到。)如果实际上无法覆盖私有方法,是否可以在其上放置某种触发器以在子类之前或之后调用我的子类中的方法?私有方法执行后? 问题答案: 私

  • 问题内容: 在下面的代码中,Consumer类可以访问Parent类的受保护方法。由于Parent和Consumer类之间没有关系,这怎么可能。 谢谢 问题答案: 表示:相同的包或通过继承。由于您的课程都在(实际上不建议使用),因此可以进行访问。顺便说一句:如果您尝试测试Java访问控制,则会忘记(= no修饰符= )。 另一方面,访问是指:从该特定类(以及仍然是主机类成员的非静态内部类)之外的任

  • 问题内容: 我正在阅读一些Java文本,文本说我们只能为类和接口应用或访问修饰符。因此,如果我们声明以下内容,则会产生编译错误: 要么 我很好奇为什么类或接口不能接收或访问修饰符? 问题答案: 表示“仅在封闭类中可见”。 表示“仅在封闭类和任何子类中以及封闭类包中的任何位置可见”。 因此,应用于顶级类没有任何意义;的定义的第一部分也是如此。的第二部分 可能 适用,但是它被默认的(受包装保护)修饰符