2010-09-14 55 views
4

我可以使用Access指定符“public”或默认值创建Main类。为什么不能保护java主类?

但为什么我不能创建与保护。由于默认本身允许为什么不保护。

市民:

public class MainClass { 
public static void main(String[] args) { 
} 
} 

默认:

class MainClass { 
public static void main(String[] args) { 
} 
} 

保护:

protected class MainClass { 
public static void main(String[] args) { 
} 
} 

其示值误差: 该类MainClass非法修改;只有公共,摘要&最终被允许MainClass.java SCJP/src行1 Java问题

+1

本质'public'意味着类_outside_其包装可见,而_default_或_package_作用域意味着它是只对同一个包内的其他类可见。什么是顶级类型的语义才能得到保护?由于'protected'通常是指继承的一个特性(只对子类可见),所以它只对内部类有意义。 – 2010-09-14 07:03:50

回答

15

protected涉及给成员的包含类型访问的子类。这里没有包含类型,那么它意味着什么?

请注意,这与main无关,因为它适用于任何顶级课程。这有效的嵌套类型来虽然保护:

public class Foo { 
    protected static class Bar{} 
} 

这样的Foo子类来访问Bar

+0

什么是包含类型意味着什么?你能解释一下为什么我们不能用顶级类保护。我明白顶级类不是私有的,因为我们不能创建该类的对象,所以没有任何意义。 – 2015-02-13 04:36:58

+0

@AppKart:包含其他类型的包含类型 - 所以包含Bar类型的是“Foo”。基本上,对于一个类的* any *成员,'protected'授予该成员对包含该成员的类的子类的访问权限。但是顶级班级*不是任何班级的成员。 – 2015-02-13 07:01:43

2

受保护的或私人的班级没有意义 - 作为顶级班级,而不是内部班级。这样的类别将不可用。受保护的意思是,班级中的元素可以被儿童看到。但是如果整个班级都会成为一揽子计划呢?在这种情况下,任何其他类甚至可以看到这样的类(即使在相同的包中),直到它扩展这样的类。这很奇怪,这就是为什么它被禁止。

0

您是否通过将封闭类设置为受保护来影响主方法的可见性?
据我知道,对于一个主要方法是访问有您需要确保两两件事:

  1. 封闭类是公共的。 (我认为它也可以默认)
  2. 封闭类和父文件具有相同的名称。

希望这有助于:)

+0

(1)由于封闭类必须是顶层,因此它只能是公共或私有包。两者都有效。(2)封闭类不需要与父文件具有相同的名称。 – emory 2010-09-14 07:15:26

+0

如你所说封闭类可以是公开的或默认的。但保护是公开和默认写入。所以我们为什么不能使用它.. – Santhosh 2010-09-14 07:27:45

+0

@santose:受保护的只对那个班的孩子可见。主类是程序的入口点,执行开始的地方,所以它必须是公开的。只有这样外部实体(即他们的系统)才能看到并使用它。 – 2010-09-14 08:05:37

相关问题