真正基本的问题。我目前正在尝试以更加面向对象的方式编写代码,但有些内容我并不完全理解。我相信这不仅适用于多种编程语言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)
答案 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参数中,通常通过引用传递(结构除外)而不是复制。所以传递参数没有初始化。