2013-03-24 52 views
1

此问题涉及本身(而不是它们的方法或数据)需要声明为公共。什么时候在课堂定义中需要“公开”?

目前我是一个Java noob,自学只是非常基础。我熟悉其他几种语言,但在Java中,我只写了非常基本的程序,就像在一个主类(一个文件)中的所有内容一样。

所以今天我决定尝试一些新东西,并把课程放在单独的文件中。让我感到意外的是,当我将课程放在单独的文件中时,即使课程没有标记为“公开”,主课程也可以访问此课程。

为了一个明确的例子,可以说我有只是两个文件在一个文件夹中。文件“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 

所以我只是想知道类定义真的需要“公共”吗?

编辑添加的新的信息 正如答案下面的建议,我尝试添加一个“一揽子”语句的每个文件,以便从不同的封装使之。正如预期的那样访问类“你好”,然后被拒绝,除非我做了两个类“你好”和它的方法“的sayHello()公开的。谢谢大家。

+1

public class is visible *在包外*他们在 – 2013-03-24 15:57:14

+2

中声明http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html – 2013-03-24 15:58:00

回答

1

两个类都包私人,他们都居住在相同的文件夹,所以这两个类可以看到对方。

如果一个类被驻留在封装外部,或从另一个包另一类需要访问这些,就无法使用。

Here's a reference to Oracle's visibility of methods/classes/fields.

+0

谢谢。我可能应该在问题中增加一个问题,那就是我不知道包是什么,或者指定文件是否是包的一部分。因此,就像文件都在同一个**文件夹中一样简单(在这种情况下),那么它们被认为是同一个包的一部分(即使没有正式定义包)。 – Stuart 2013-03-24 16:01:25

+1

是的,这是正确的。如果没有定义软件包,则认为它在默认软件包中。 – Makoto 2013-03-24 16:03:31

+0

谢谢真诚,这回答了我的问题。是的,我用google搜索了一下,结果发现公众需要在当前的软件包外面看到这个类。只是因为我知道我没有定义任何软件包,所以感到惊讶的是没有“公共”说明符。你已经清除了我的误解。谢谢。 – Stuart 2013-03-24 16:08:04

1

包装定义

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

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

使用公共课。

当你想从另一个包制作这个类的对象。

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

Demo package. 
    Demo.java 

这两个类都在不同的包中。

Demo1 package 
    Demo1.java 

现在要创建Demo1.java Demo.java类的对象,它是在不同的包,那么你需要定义Demo类公众。

阅读docs

+0

感谢TGMCians。我还没有准备好定义软件包。我意识到他们的存在,但尚未研究他们如何定义或任何其他。看起来我不得不做下一件事来学习。 :) – Stuart 2013-03-24 16:13:36

1

默认情况下,同一个包[或文件夹]下的所有类都具有访问修饰符'protected'。所以你可以毫无困难地访问课程。参考'继承'的概念,你会更好地了解访问修饰符。干杯!

相关问题