在 Java 中,类的声明有两种形式:
-
public class Test
-
class Test
它们的区别主要在于访问权限和文件名的要求。下面我会详细解释这两种形式的区别。
1. public class Test
-
访问权限:
-
public
表示这个类是公共的,可以被其他包(package)中的类访问。 -
如果没有
public
,类的访问权限是包级私有(默认),只能被同一个包中的类访问。
-
-
文件名的要求:
-
如果一个类被声明为
public
,那么它的文件名必须与类名完全相同。 -
例如,
public class Test
必须保存在Test.java
文件中。
-
-
使用场景:
-
当你希望这个类被其他包中的类使用时,需要声明为
public
。
-
示例
java
// 文件 Test.java public class Test { public void sayHello() { System.out.println("Hello!"); } }
2. class Test
-
访问权限:
-
如果没有
public
,类的访问权限是包级私有(默认),只能被同一个包中的类访问。 -
其他包中的类无法访问这个类。
-
-
文件名的要求:
-
文件名不需要与类名相同。
-
一个
.java
文件中可以包含多个非public
类,但只能有一个public
类。
-
-
使用场景:
-
当你希望这个类只在当前包中使用时,可以不声明为
public
。
-
示例
java
// 文件 MyFile.java class Test { void sayHello() { System.out.println("Hello!"); } } class AnotherClass { // 其他代码 }
关键区别总结
特性 | public class Test | class Test |
---|---|---|
访问权限 | 公共的,可以被其他包访问 | 包级私有,只能被同一个包中的类访问 |
文件名要求 | 文件名必须与类名相同(Test.java ) | 文件名可以与类名不同 |
一个文件中的数量 | 一个文件中只能有一个 public 类 | 一个文件中可以有多个非 public 类 |
使用场景 | 需要被其他包中的类访问时使用 | 只在当前包中使用时使用 |
举个例子
场景 1:public class Test
java
// 文件 Test.java public class Test { public void sayHello() { System.out.println("Hello!"); } }
-
这个类可以被其他包中的类访问。
-
文件名必须是
Test.java
。
场景 2:class Test
java
// 文件 MyFile.java class Test { void sayHello() { System.out.println("Hello!"); } } class AnotherClass { // 其他代码 }
-
这个类只能被同一个包中的类访问。
-
文件名可以是
MyFile.java
,不需要与类名相同。
总结
-
public class Test
:-
类是公共的,可以被其他包访问。
-
文件名必须与类名相同。
-
-
class Test
:-
类是包级私有的,只能被同一个包中的类访问。
-
文件名可以与类名不同。
-
选择哪种形式取决于你的需求:
-
如果类需要被其他包访问,使用
public class
。 -
如果类只在当前包中使用,使用
class
。