【问题标题】:Confused with java aceess modifers. Why [default] class is accessable from outside? [duplicate]与 java 访问修饰符混淆。为什么可以从外部访问 [default] 类? [复制]
【发布时间】:2019-12-28 03:57:57
【问题描述】:

我更熟悉其他语言。但我现在正在学习 java。我正在阅读访问修饰符。我发现只有公共类可以从外部访问。并且无法从外部访问 [default] 类。 但是由于我编写了一些简单的代码,我可以从外部访问非公共类:

Add.java

class Add{
    int a(int x, int y)
    {
        return x+y;
    }
}

MyClass.java

public class MyClass {
    public static void main(String args[]) {
      Add obj= new Add();
      int sum= obj.a(10,20);
      System.out.println("Sum of x+y = " + sum);
    }
}

输出>>>

x+y 之和 = 30

所以请有人为我解释一下?我想知道这是怎么回事! 提前谢谢。

【问题讨论】:

  • 这些类是否在同一个包中?
  • 我已经付出了我所做的一切。我创建了这两个 java 文件,没有别的
  • @user222203 然后这两个类自动成为未命名包的一部分,这使得它们可以相互访问,因为 package-private 是 Java 中的默认访问修饰符。
  • 答案是:它就是这样,因为那是语言的设计。背后没有更深层次的含义。您可以在教程中阅读有关访问修饰符及其行为的所有信息,例如这个Oracle tutorial on Controlling Acces to Member of Classes.
  • @Keiwan 您的评论可能就是答案,他们会自动将彼此视为同一个包,因为我没有给出任何包名..

标签: java class access-modifiers


【解决方案1】:

您可能知道,它们是 Java 中的 4 个访问修饰符 - 默认、私有、受保护和公共。未使用任何访问修饰符(即具有默认访问修饰符)声明的数据成员、类或方法只能在同一个包中访问。 我假设两个类 - Add.class 和 MyClass.class 在同一个包中,尝试将它们分开,您会发现您无法从外部访问。

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2011-04-12
    • 2019-04-14
    • 2013-04-16
    • 2020-02-05
    • 2015-11-26
    • 2013-04-11
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多