【问题标题】:What is the default scope of a method in Java?Java中方法的默认范围是什么?
【发布时间】:2010-10-17 10:04:02
【问题描述】:

如果我输入:

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

doThis() 的默认范围是什么?

公开?受保护?私人的?

【问题讨论】:

    标签: java scope


    【解决方案1】:

    默认范围是包私有。同一个包中的所有类都可以访问方法/字段/类。包私有比受保护和公共范围更严格,但比私有范围更宽松。

    更多信息:
    http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
    http://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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-06
            • 2011-01-21
            • 1970-01-01
            • 2017-04-10
            • 2014-03-28
            • 2012-05-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多