public static vs open static vs public class vs open class?

时间:2017-05-08 18:18:36

标签: swift swift3 scope override

随着Swift 3中open关键字的引入,以下是方法的有效范围修饰符:open staticpublic staticopen class,{{1}但他们的差异到底是什么?我理解public class相当于Java中的public,允许覆盖public final类方法和变量,但是open或{{1} } 意思?它们是public class func的同义词吗?即所有3个实现都不允许子类覆盖?在特定情况下,4种不同排列中的每一种都有独特的优势吗?

1 个答案:

答案 0 :(得分:24)

这个问题不必要地复杂,因为您要比较两个变量(openpublicstaticclass)的笛卡尔积的成员,而不是分别询问这两个变量。

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

open vs public

public

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

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

open

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

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

static vs class

static

static成员(方法或属性)是绑定到其定义的特定范围(class / struct / enum)的成员。它&# 39;这样命名是因为对这些成员的访问总是静态调度。这相当于Java的static。目标C与此无关。

class

class成员是绑定到类或其子类的成员。 class个成员可以被子类覆盖。因此,在一般情况下,它们会动态调度,但在某些情况下,优化程序可以对class成员的访问进行虚拟化。 Java与此无关。这相当于Objective C的类(+)方法。