Base Class 的协议委托概念

Protocol Delegate Concept With Base Class

我对协议方法和class方法有疑问。下面的代码解释了我想要实现的目标,

protocol Test {
    func abc()
}

class Base {
    func abc() { }
}

class MyCustomClass: Base, Test {

}

所以,问题是 MyCustomClass 将添加哪种方法?

在我的方案中,我想添加 Test 协议方法以及 'Base' class 方法。截至目前,这允许我使用 'override' 关键字添加 Base class 方法。

那么,有谁知道我们如何访问 Test ProtocolBase Class 吗?

是否可以在 MyCustomClass 中获取包含相同方法名称的两种方法?

你好像不太明白什么是协议。它只是一个保证其采用者包含某些成员的合约。

那么让我们看看您的代码,我只是稍微修改了一下:

protocol Test {
    func abc()
}

class Base {
    func abc() { print("Base abc") }
}

class MyCustomClass: Base, Test {

}

您的代码的重要之处在于它可以编译。为什么?通过采用 Test,MyCustomClass 承诺它包含一个 abc() 函数。它 信守 这个承诺。如何?通过从其超类 Base.

继承一个 abc() 函数

至于"what happens",试试看吧:

MyCustomClass().abc() // Base abc

我们实例化MyCustomClass,调用那个实例的abc(),果然,继承自Base的abc()运行起来,符合多态性的规律。

但这与协议无关!该协议无关紧要,在这里没有任何用处。您可以从示例中完全删除协议并获得完全相同的结果。该协议只是对其采用者的描述。它说 "whoever adopts me has an abc() function," 果然,MyCustomClass 采用协议并且 有一个 abc() 函数。