【问题标题】:Abstract and final are access modifiers or access specifiersAbstract 和 final 是访问修饰符或访问说明符
【发布时间】:2014-06-04 14:49:25
【问题描述】:
abstract final class Outer {

}

所以我在编译上面的代码并得到了明显的错误,但错误是访问修饰符的非法组合,但是java文档http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html说只有3个访问修饰符(公共,私有和受保护)所以这些抽象, final、public、private 和 protected 是访问修饰符或访问说明符或其他东西?因为在许多书籍和网站中,他们提到这些关键字有时是访问修饰符,有时是访问说明符。我在这里很困惑。

【问题讨论】:

  • 你不能同时使一个类抽象和最终。摘要说您将扩展该类并使其具体化。 final 说类不能扩展。
  • Final 和 abstract 不是访问修饰符。在 Java 中,唯一的访问修饰符是 public、private 和 protected。据我所知,访问修饰符和说明符之间的区别只是术语上的区别。
  • @ClementHoang 那么为什么我得到错误作为访问修饰符的非法组合
  • 实际上有四个访问修饰符:public protected private aaaa和package private(如果没有指定访问修饰符则隐含后者)
  • @Durandal 包不是修饰符

标签: java access-modifiers access-specifier


【解决方案1】:

在类声明的上下文中,根据JLS #8.1.1,这些都是类修饰符。

如果您进一步阅读,您会发现只有 public、private 和 protected 是访问修饰符(这是有道理的:它们确定类是否可以从代码的其他部分访问)。

所以是的,从技术上讲,abstract 和 final 不是访问修饰符,错误消息可能更准确。请注意,javac (Java 8) 错误消息是:

修饰符的非法组合:abstract 和 final

【讨论】:

  • 起初你说所有(抽象、最终、公共、私有和受保护)修饰符,但下一行你说只有公共、私有和受保护是修饰符。那是什么意思呢?
  • @user3690061 这些都是修饰符,但只有 private、public 和 protected 是 access 修饰符。
  • 所以没有什么叫做访问说明符?
  • @user3690061 不在官方文档中。 JLS 中对说明符的唯一引用是在 parameter specifier 的上下文中,它表示方法参数的类型和名称,如 int i 中的 int i
  • @user3690061 谁告诉你最后的 amd 摘要是访问修饰符是错误的。 public、protected 和 private(如果您计算隐式修饰符,则为包私有)是唯一的 access 修饰符。 abstract、final、static、volatile、transient.. 所有这些都是修饰符,但不是 访问修饰符
猜你喜欢
  • 2011-01-15
  • 2014-11-03
  • 2014-11-03
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2012-08-15
  • 2011-10-09
  • 2017-08-18
相关资源
最近更新 更多