【问题标题】:Why does Swift allow leakage of super class member's functionality via a sub class? Is Swift inheritance broken?为什么 Swift 允许通过子类泄漏超类成员的功能? Swift 继承被破坏了吗?
【发布时间】:2020-09-09 03:16:28
【问题描述】:

我在 XCode 中尝试了这个 Swift 代码。

File1.swift(非主文件):


class A {
    fileprivate func myFun() {
        print("A myFun")
    }
}

class B: A {
    override internal func myFun() {
        super.myFun()
        print("B myFun")
    }
}

注意:

  1. “A”不提供对“myFun”的访问,以访问在 File1 之外创建的对象。
  2. “B”是 A 的子类,并使用内部访问说明符覆盖“myFun”。

ma​​in.swift

let s = B()
s.myFun()

输出:

我的乐趣

我的乐趣

程序以退出代码结束:0

注意:

  1. 我使用子类 (B) 来访问它不允许访问的超类 (A) 的一部分。

这种行为是有意的吗?如果是,那么这有什么用?

【问题讨论】:

    标签: swift inheritance


    【解决方案1】:

    你可以找到答案Here

    简而言之 - fileprivate != privateAB 在同一个文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多