Swift - 使用不同的默认参数覆盖函数

时间:2016-10-13 14:54:23

标签: swift swift3 default-parameters function-overriding

大小写:具有函数(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

它是使用函数体但是不使用函数默认参数的错误或预期行为吗?

1 个答案:

答案 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的函数体。

有趣的观察!