Java中方法的默认范围是啥?
Posted
技术标签:
【中文标题】Java中方法的默认范围是啥?【英文标题】:What is the default scope of a method in Java?Java中方法的默认范围是什么? 【发布时间】:2010-10-17 10:04:02 【问题描述】:如果我输入:
void doThis()
System.out.println("Hello ***.");
doThis()
的默认范围是什么?
公开?受保护?私人的?
【问题讨论】:
【参考方案1】:默认范围是包私有。同一个包中的所有类都可以访问方法/字段/类。包私有比受保护和公共范围更严格,但比私有范围更宽松。
更多信息:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.htmlhttp://mindprod.com/jgloss/scope.html
【讨论】:
"包默认比...更严格" 可能还值得一提的是,在公开外部单元测试方法时,“package-private”是一个很好的范围。 如果是这种情况,那么为什么有必要公开某些内容,除非您正在创建一个库或任何用户可以从中获得代码功能的东西? @user3858162 大多数重要的应用程序都组织成多个包,在这种情况下,需要公共范围来调用来自其他包的调用方法。【参考方案2】:任何定义为包私有的东西都可以被类本身、同一个包内的其他类访问,但不能在包外,也不能被子类访问。
请参阅this page 获取访问级别修饰符的方便表...
【讨论】:
【参考方案3】:如果没有访问修饰符,类成员可以在声明它的整个包中访问。您可以通过Java Language Specification, §6.6.了解更多信息
无论是否明确声明,接口的成员始终是可公开访问的。
【讨论】:
【参考方案4】:默认范围是“默认”。这很奇怪——请参阅 these references 了解更多信息。
【讨论】:
其实不是:它是包私有的 我无法删除我的答案,因为它已被接受。我鼓励乔接受@Esko 的回答! 第二个链接坏了(顺便说一句,这两个链接很容易错过)【参考方案5】:Java 8 现在允许在具有 default 范围(且仅限静态)的接口内部实现方法。
【讨论】:
【参考方案6】:如果您没有为您的方法提供任何修饰符,那么默认情况下它将是默认修饰符,它在包内具有范围。 更多信息可以参考http://wiki.answers.com/Q/What_is_default_access_specifier_in_Java
【讨论】:
以上是关于Java中方法的默认范围是啥?的主要内容,如果未能解决你的问题,请参考以下文章