Swift 开放类公共成员函数

Swift 开放类公共成员函数,swift,Swift,我在Swift中有一个形状模块,包括形状类。我刚刚打开了一个新的游乐场,并将这个模块添加到源文件中。操场中的Square类可以继承Shapes模块中的Shape类。这没有问题,但Shape类中的公共方法在Square类中被重写 根据swift来源,只有打开的成员函数才能在执行继承时被重写 也许这是一个很低级的问题,所以我已经很抱歉问了 下面是一个示例操场代码,当在不同的模块中定义了父项和子项时,行为是相同的: open class Parent { public init() {

我在Swift中有一个形状模块,包括形状类。我刚刚打开了一个新的游乐场,并将这个模块添加到源文件中。操场中的Square类可以继承Shapes模块中的Shape类。这没有问题,但Shape类中的公共方法在Square类中被重写

根据swift来源,只有打开的成员函数才能在执行继承时被重写

也许这是一个很低级的问题,所以我已经很抱歉问了

下面是一个示例操场代码,当在不同的模块中定义了
父项
子项
时,行为是相同的:

open class Parent {
    public init()     { print("Parent init") }
    public func foo() { print("Parent foo") }
    open func bar()   { print("Parent bar") }
}

class Child: Parent {
    override init()     { print("Child init") }
    override func foo() { print("Child foo") }
    override func bar() { print("Child bar") }
}

let child = Child()
child.foo()
child.bar()
产出:

Child init
Parent init
Child foo
Child bar
  • 你应该在帖子中加入你的代码

  • “当执行继承时,只有打开的成员函数才能被重写”,我不这么认为。以下是公开课和公开课的区别:

  • Open access仅适用于类和类成员,它有所不同 从公共访问,如下所示:

    • 具有公共访问权限或任何更严格访问级别的类只能在定义它们的模块内进行子类化
    • 具有公共访问权限或任何更严格访问级别的类成员只能由模块内的子类重写,其中 他们被定义了
    • 开放类可以在定义它们的模块内以及在导入它们所在模块的任何模块内进行子类化 定义
    • 开放类成员可以被定义它们的模块内的子类以及导入 定义它们的模块

    我所说的只对构造函数有效,对成员函数无效。可以覆盖公共初始值设定项。语法和拼写编辑。您在文档中声明的规则#2明确指出,公共成员只能在其定义模块中被覆盖。这与规则#3有点冲突,这有点回避。