(delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)

8.5.2 封闭类和Final方法

如前所述,Java 采用非常动态的方法,默认情况下采用延迟绑定(或虚函数)。因此,Java 语言引入了一些概念,如不能继承的类(封闭类)和不能在派生类中覆盖的方法(final方法或非虚拟方法)。

封闭类是指不能进一步继承的类。如果您要发布组件(不含源代码)或运行时包,并希望限制其他开发人员修改您代码的能力,这样做可能会有意义。最初的目标之一也是为了提高运行时的安全性,这在完全编译的语言(如 Object Pascal)中一般是不需要的。

final方法是虚方法,您在继承类中无法进一步覆盖。同样,虽然它们在 Java 中是有意义的(在 Java 中,所有方法默认都是虚方法,而final方法得到了显著优化),但在 C# 中却被采用了,因为在 C# 中,虚函数是显式标记的,其重要性要低得多。同样,它们也被添加到 Object Pascal 中,但在该语言中很少使用。

就语法而言,这是一个封闭类的代码:

type
  TDeriv1 = class sealed(TBase)
    procedure A; override;
  end;

尝试从中继承会导致错误,“无法扩展封闭类TDeriv1(Cannot extend sealed class TDeriv1)”。这是最终方法的代码:

type
  TDeriv2 = class(TBase)
    procedure A; override; final;
  end;

从这个类继承并覆盖A方法会导致编译器错误,“无法覆盖最终方法(Cannot override a final method)”。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 07:12:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 07:12:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 07:12:01       87 阅读
  4. Python语言-面向对象

    2024-04-05 07:12:01       96 阅读

热门阅读

  1. centos7 安装 nginx

    2024-04-05 07:12:01       30 阅读
  2. fssh挂载远程服务器目录

    2024-04-05 07:12:01       30 阅读
  3. TensorBoard可视化+Confustion Matrix Drawing

    2024-04-05 07:12:01       34 阅读
  4. 归类一些vim的插件,需要时来看

    2024-04-05 07:12:01       38 阅读
  5. 查看Git用户名/密码/邮箱,及设置git配置

    2024-04-05 07:12:01       38 阅读
  6. 阻抗控制中的effort and flow

    2024-04-05 07:12:01       33 阅读
  7. GoPro相机使用的文件格式和频率

    2024-04-05 07:12:01       36 阅读
  8. RabbitMQ3.x之八_RabbitMQ中数据文件和目录位置

    2024-04-05 07:12:01       35 阅读
  9. 2024.3.16力扣每日一题——矩阵中移动的最大次数

    2024-04-05 07:12:01       47 阅读
  10. 算法之动态规划

    2024-04-05 07:12:01       34 阅读
  11. 搜索引擎-03-搜索引擎原理

    2024-04-05 07:12:01       33 阅读