我对协议方法和类方法有疑问。下面的代码解释了我要实现的目标,
protocol Test {
func abc()
}
class Base {
func abc() { }
}
class MyCustomClass: Base, Test {
}
因此,问题是MyCustomClass
将添加哪种方法?
在我的场景中,我想添加Test
协议方法以及'Base'类方法。截至目前,这使我能够使用'override'关键字添加Base
类方法。
那么,有谁知道我们如何同时访问Test Protocol
和Base Class
?
是否可以在MyCustomClass
中获得两个方法名称相同的方法?
答案 0 :(得分:1)
您似乎不明白什么是协议。仅仅是保证其采用者包含某些成员的合同。
因此,让我们看一下您的代码,我仅对其做了一些修改:
protocol Test {
func abc()
}
class Base {
func abc() { print("Base abc") }
}
class MyCustomClass: Base, Test {
}
关于代码的重要一点是它可以编译。为什么?通过采用Test,MyCustomClass承诺它包含一个abc()
函数。它保持承诺。怎么样?通过从其超类Base继承abc()
函数。
至于“发生了什么”,只需尝试一下:
MyCustomClass().abc() // Base abc
我们实例化MyCustomClass,调用该实例的abc()
,并且根据多态性定律,可以肯定的是,从Base运行继承的abc()
。
但这与协议无关!该协议无关紧要,在这里没有用。您可以从示例中完全删除该协议,并获得完全相同的结果。该协议只是对其采用者的描述。它说:“任何采用我的人都具有abc()
函数,并且可以肯定的是,MyCustomClass采用了协议,而确实具有abc()
函数。