1

这个问题与需要将本身(而不是它们的方法或数据)声明为公共的位置有关。

目前我是一个 Java 菜鸟,只用最基本的东西自学。我熟悉其他几种语言,但在 Java 中我只编写了非常基本的程序,比如一个主类(一个文件)中的所有内容。

所以今天我决定尝试一些新的东西,并将类放在单独的文件中。令我惊讶的是,当我将一个类放在一个单独的文件中时,主程序可以访问这个类,即使它没有标记为“public”。

为了一个明确的例子,假设我在一个文件夹中只有两个文件。文件“mainprog.java”包含以下内容:

class mainprog {
    public static void main(String[] args) {
        hello myHello = new hello();
        myHello.sayHello();
    }
}

文件“hello.java”包含以下内容:

class hello {
    void sayHello() {
    System.out.println("Hello world");
    }
}

“你好”中没有任何东西被指定为公共的,但这编译和运行得很好

javac mainprog.java
java mainprog

所以我只是想知道类定义在哪里真正需要“公共”?

编辑以添加新信息 如下面的答案所建议的那样,我尝试向每个文件添加“包”语句,以便从不同的包中制作它们。正如预期的那样,除非我将“hello”类和它的方法“sayHello()”都公开,否则对“hello”类的访问被拒绝。谢谢大家。

4

3 回答 3

1

这两个类都是包私有的。它们都驻留在同一个文件夹中,因此两个类可以互相看到。

如果一个类驻留在包之外,或者另一个包中的另一个类需要访问这些类,则它将不可用。

这是 Oracle 对方法/类/字段的可见性的参考。

于 2013-03-24T15:57:40.913 回答
1

包定义

Java 包是一种将 Java 类组织到命名空间中的机制,类似于 Modula 的模块。Java 包可以存储在称为 JAR 文件的压缩文件中,从而允许类作为一个组而不是一次下载一个更快。程序员通常还使用包来组织属于同一类别或提供类似功能的类。

包为其包含的类型提供唯一的命名空间。同一个包中的类可以访问彼此的包访问成员。

使用公共课。

当您想从另一个包中创建此类对象时。

假设您在 Demo 包中有一个类。

Demo package.
  Demo.java

两个类都在不同的包中。

Demo1 package
   Demo1.java

现在你想在 Demo1.java 中创建一个 Demo.java 类的对象,它们位于不同的包中,那么你需要定义 Demo 类 public。

阅读此文档

于 2013-03-24T15:59:13.840 回答
1

默认情况下,同一包[或文件夹]下的所有类都具有访问修饰符“受保护”。因此,您可以毫无困难地访问课程。请参阅“继承”概念,您将对访问修饰符有更好的了解。干杯!!

于 2013-03-24T16:20:15.350 回答