当前位置: 首页 > 面试题库 >

为什么接口不能具有受保护的方法

司马羽
2023-03-14
问题内容

在Java中,为什么不能在接口中使用受保护的方法?

由于根据Java规范

受保护的访问(由关键字protected表示)-同一包中任何类型以及任何包中的子类均可访问的字段或方法。

如果我必须使用该接口,那么我将实现它并覆盖方法。因此,如果我要实现类可以访问这些方法的位置,因为该方法可以在任何包中访问。那么,将方法声明为Interface中的保护有什么害处?


问题答案:

受保护的方法旨在与子类共享 实现 。就实现共享而言,接口什么也没有提供,因为它们根本没有实现。因此,接口上的所有方法都必须是公共的。



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

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

  • 我熟悉。正如我在spring文档http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/aop.html中看到的,基于代理的概念。 在8.2.3.1支持的切入点指定器部分中,我发现了下面的注释 由于Spring的AOP框架的基于代理的性质,受保护的方法根据定义是不被拦截的,对于JDK代理(如果这不适用)和CGL

  • 问题内容: 从上一个私有方法春天在什么@Transactional属性的工作? 使用代理时,应仅将@Transactional注释应用于具有公共可见性的方法。如果使用@Transactional注释对受保护的,私有的或程序包可见的方法进行注释,则不会引发任何错误,但是带注释的方法不会显示已配置的事务设置。 我可以想到排除和方法的充分理由,但是为什么方法不能在事务上表现呢?以下堆栈跟踪显示了公共方法

  • 我可以想出排除和方法的充分理由,但为什么方法不会以事务性方式运行呢?以下stacktrace显示了公共方法(通过接口代理调用)的正确行为: 当调用一个“完全相同”的受保护方法(通过非接口CGLIB代理)时,我们得到如下结果: 这显然是一个设计决定(为什么?),但我认为它很值得怀疑的是,当它显然是开发人员的错误时,它却无声无息地失败了。 编辑这显然不是使用接口(只是接口中的公共方法)时的问题,但由于

  • 问题内容: 出于好奇, 为什么将方法的访问修饰符设置为。为什么不能呢?有人可以向我解释这背后的任何具体原因吗? 另外,我知道该方法仅被调用一次。如果我在程序内部两次调用它,会发生什么情况?垃圾收集器会再次调用吗? 问题答案: 我用另一个问题回答您的问题: 为什么方法不应该受到保护? 通常,您应该尝试使事物尽可能私密。这就是封装的全部意义所在。否则,您 什么都 可以做。不能(因为派生类应该能够访问它