将对象作为参数传递时,实例化何时发生

时间:2015-12-23 14:26:00

标签: swift oop

真正基本的问题。我目前正在尝试以更加面向对象的方式编写代码,但有些内容我并不完全理解。我相信这不仅适用于多种编程语言Swift,因为我也在一些PHP代码中看到了这一点。

我的印象是,为了让您访问类中的方法,您需要创建一个实例,但我不确定当您将对象作为参数传递时会发生这种情况。

在下面的代码中,moveDog(move:Animal)方法将Animal对象作为参数获取,我不知道的是如何在不使用Animal对象的情况下访问方法首先实例化类(print(move.run()))?

在声明本地参数moveDog(move:Animal)时是否发生实例化?我们可以说它与我们let move = Animal()一样吗?

class Animal{
    func run(){
        print("Running...")
    }
}

class Dog{
    func moveDog(move:Animal){
        //how can the run method be called without
        //having to instantiate Animal?
        print(move.run())
    }
}

let dog = Animal()

let buddy = Dog()

buddy.moveDog(dog)

1 个答案:

答案 0 :(得分:4)

初始化发生在您实际创建它时,例如let dog = Animal()let buddy = Dog()

快速说明,您可以通过使用相同的run()函数来改善此代码:

class Animal{

    func run(){
        print("Running...")
    }
}


class Dog: Animal{

    override func run() {
        super.run() 
    }
}


let dog = Animal() //You don't need to instantiate this to use the Dog class

let buddy = Dog()

buddy.run()

在swift参数中,通常通过引用传递(结构除外)而不是复制。所以传递参数没有初始化。