大小写:具有函数(doSomething)的基类(A)具有默认参数(param:T = foo),以及子类(B),它使用不同的默认参数覆盖该函数(param:T =酒吧)。 但后来被称为A.
编辑:为原始代码道歉,实际上发生的事情基本上如下:
class Foo
{
func doSomething(a: String = "123")
{
print(a)
}
}
class Bar: Foo
{
override func doSomething(a: String = "abc")
{
print("Using Bar method body... but not Bar's default a value!")
print(a)
}
}
(Bar() as Foo).doSomething()
// Prints:
// Using Bar method body... but not Bar's default a value!
// 123
它是使用函数体但是不使用函数默认参数的错误或预期行为吗?
答案 0 :(得分:2)
它被称为Foo(或A),因为你告诉它。因为你正在实例化Bar() as Foo
,所以它正在做 。
如果你这样做:
Bar().doSomething()
Bar的方法就是所谓的:
Using Bar method body...
abc
有趣的是,正如你所指出的那样:
(Bar() as Foo).doSomething()
收益率:
Using Bar method body...
123
因为Bar被实例化 as Foo,(注意强调)Bar获取Foo的默认参数,但仍然执行Bar的函数体。
有趣的观察!