前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java | 顶层类(Top-Level Class)

Java | 顶层类(Top-Level Class)

原创
作者头像
Blume
修改2021-03-23 09:45:00
1.2K0
修改2021-03-23 09:45:00
举报
文章被收录于专栏:Java 文苑

前言

定义

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

代码语言:txt
复制
/**
 * 定义一个公共的顶层类。
 *
 * @author Blume
 */
public class MyClass {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
/* 输出结果:
Hello World!

 */

概述

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

代码语言:txt
复制
/**
 * 定义一个包私有的顶层类。
 *
 * @author Blume
 */
public class PackagePrivateClass {
    public static void main(String[] args) {
        System.out.println("PackagePrivateClass:这是一个包私有的顶层类。");
    }
}
/* 输出结果:
PackagePrivateClass:这是一个包私有的顶层类。

 */
  • 提示:在定义一个类时,如果在 class 关键字前不加 publicprivateprotected 关键字,那么这个类就声明为包私有的(Package-Private),即它是类的默认声明。包私有的类可在其所在的包内共享,但不能跨包共享。

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

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

并列多个顶层类

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

代码语言:txt
复制
/**
 * 定义一个顶层类。
 *
 * @author Blume
 */
public class TopLevelClass {
    public static void main(String[] args) {
        System.out.println("TopLevelClass:这是与 TopLevelClass.java 文件同名的顶层类。");
        System.out.println(new AnotherClass().toString());
    }
}

/**
 * 定义另一个顶层类。
 *
 * @author Blume
 */
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 关键字,将顶层类声明为抽象类,如下:

代码语言:txt
复制
/**
 * 抽象类示例
 *
 * @author Blume
 */
public class AbstractClass_demo {
    public static void main(String[] args) {
        new Subclass().printName();
    }
}

/**
 * 定义一个抽象类。
 *
 * @author Blume
 */
abstract class AbstractClass {
    private final String name;

    // 定义抽象类的构造方法。
    Public AbstractClass() {
        name = "AbstractClass:这是一个抽象类。";
    }

    // 定义一个非抽象方法。
    Public String getName() {
        return name;
    }

    // 定义一个抽象方法。
    Public abstract void printName();
}

/**
 * 定义一个子类。
 *
 * @author Blume
 */
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:这是一个抽象类的子类。

 */

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 定义
  • 概述
    • 并列多个顶层类
      • 声明抽象类
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档