综合百科行业百科金融百科经济百科资源百科管理百科
管理百科
管理营销
资源百科
人力财务
经济百科
经济贸易
金融百科
金融证券
行业百科
物流咨询
综合百科
人物品牌

顶层类

  	      	      	    	    	      	    

  2022 年 06 月 18 日 星期六

中文名称
顶层类
所属学科
Java 编程语言
汉语拼音
Dǐngcéng Lèi
词条类型
Java 术语
英文名称
Top-level class

目录

前言

  • 本文内容根据 Java 教程中的《课程:类和对象》编写而成。
  • 本文提供的是 JDK 14 的示例代码。

定义

  顶层类(Top-level class),是 Java 中对类的一种定义方式。在 .java 文件中,处于最外层的类就称为顶层类,在其外部不存在将其包围起来的任何代码块。下面的示例就是一个典型的顶层类:

 /**  * 定义一个公共的顶层类。  */ public class MyClass {     public static void main(String[] args) {         System.out.println("Hello World!");     } } /* 输出结果: Hello World!   */ 
顶层类
放大
顶层类

概述

  顶层类可声明为 public,如前面示例中的 MyClass 类,也可声明为包私有的,如下:

 /**  * 定义一个包私有的顶层类。  */ class PackagePrivateClass {     public static void main(String[] args) {         System.out.println("PackagePrivateClass:这是一个包私有的顶层类。");     } } /* 输出结果: PackagePrivateClass:这是一个包私有的顶层类。   */ 
  • 提示:在定义一个类时,如果在 class 关键字前不加 publicprivateprotected 关键字,那么这个类就声明为包私有的(Package-Private),即它是类的默认声明。包私有的类可在其所在的包内共享,但不能跨包共享。

  不允许将顶层类声明为 privateprotected,因为顶层类在本质上不属于私密类。如果将一个顶层类用 privateprotected 关键字隐藏起来(即不对外共享),那就无法创建这个类的实例,等同于没有定义这个类。

  此外,不允许将顶层类声明为 static,因为顶层类在本质上是非静态的,只有在创建其实例时,才会将其加载到内存中。否则,Java 编译器将会生成一条类似于“此处不允许使用修饰符 static”的错误消息。

并列多个顶层类

  在 .java 文件中,允许多个顶层类并列存在,但只能有一个与其文件名同名的、声明为 public 的顶层类。这个与文件名同名的顶层类可声明为包私有的,但在这个文件中的其他顶层类只能声明为包私有的

 /**  * 定义一个顶层类。  */ public class TopLevelClass {     public static void main(String[] args) {         System.out.println("TopLevelClass:这是与 TopLevelClass.java 文件同名的顶层类。");         System.out.println(new AnotherClass().toString());     } }  /**  * 定义另一个顶层类。  */ class AnotherClass {     public AnotherClass() {     }      @Override     public String toString() {         return "AnotherClass:这是在 TopLevelClass.java 文件中的另一个顶层类。";     } } /* 输出结果: TopLevelClass:这是与 TopLevelClass.java 文件同名的顶层类。 AnotherClass:这是在 TopLevelClass.java 文件中的另一个顶层类。   */ 

  在上述示例中,若将 AnotherClass 类声明为 public,则 Java 编译器将会生成一条类似于“类 AnotherClass 是公共的,应在名为 AnotherClass.java 的文件中声明”的错误消息。

声明抽象类

  可使用 abstract 关键字,将顶层类声明为抽象类,如下:

 public class AbstractClassDemo {     public static void main(String[] args) {         new Subclass().printName();     } }  /**  * 定义一个抽象类。  */ abstract class AbstractClass {     private final String name;      // 定义抽象类的构造方法。     public AbstractClass() {         name = "AbstractClass:这是一个抽象类。";     }      // 定义一个非抽象方法。     public String getName() {         return name;     }      // 定义一个抽象方法。     public abstract void printName(); }  /**  * 定义一个子类。  */ class Subclass extends AbstractClass {     private final String name;      // 定义子类的构造方法。     public Subclass() {         super();         name = "Subclass:这是一个抽象类的子类。";     }      // 实现父类的抽象方法。     @Override     public void printName() {         System.out.println(super.getName());         System.out.println(name);     } } /* 输出结果: AbstractClass:这是一个抽象类。 Subclass:这是一个抽象类的子类。   */ 

  想要了解有关抽象类的更多信息,请参阅《抽象类》。