gpt4 book ai didi

swift - public static vs open static vs public class vs open class?

转载 作者:IT王子 更新时间:2023-10-29 05:45:57 25 4
gpt4 key购买 nike

随着在 Swift 3 中引入 open 关键字,以下突然成为方法的有效范围修饰符:open staticpublic static , open class, public class, 但它们到底有什么区别呢?我知道 public 相当于 Java 中的 public final 允许 open 类方法和变量被覆盖,但是然后呢public class funcopen static func 是什么意思?它们是 public static func 的同义词吗?即所有 3 个实现都不允许被子类覆盖?在特定情况下,这 4 种不同排列中的每一种都有独特的优势吗?

最佳答案

这个问题过于复杂,因为您要比较两个变量的笛卡尔积的成员(open vs publicstatic vs class),而不是分别询问这两个变量。

这不是open static vs public static vs open class vs public class 的问题,而是open vs publicstatic vs class。它们是两个正交维度。

openpublic

公共(public):

在模块内,public 访问说明符允许访问覆盖。

从模块外部,public 访问说明符允许访问,但不允许覆盖/子类。

打开:

在模块内,open 访问说明符允许访问覆盖。

从模块外部,open 访问说明符允许访问, 允许覆盖/子类。

staticclass

静态:

static 成员(方法或属性)是绑定(bind)到特定范围的成员(class/struct/enum ) 它是在其中定义的。之所以这样命名是因为对此类成员的访问始终是静态调度的。这相当于 Java 的 static。 Objective C 没有与此等效的内容。

:

class 成员是绑定(bind)到一个类或其子类的成员。 class 成员可以被子类覆盖。因此,它们在一般情况下是动态调度的,尽管在某些情况下优化器可以将对 class 成员的访问去虚拟化。 Java 没有与此等效的东西。这相当于 Objective C 的类 (+) 方法。

关于swift - public static vs open static vs public class vs open class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43854656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com