//
// ViewController.swift
import UIKit
/**
在swift中,同一個專案中(同一個名稱空間),所有的類預設都是共享的,不需要引用,可以直接訪問,不需要import
所有物件的屬性 var,也可以直接訪問到
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//例項化一個類
// () -> alloc init
// let p = Person.init(name: "老王");
// print(p.name);
let p = Student(name: "老王", num: "10");
print("\(p.name + p.num)");
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
//
// Person.swift
import UIKit
/**
1. 建構函式的目的,給自己的屬性分配空間並設定初始值
2. 呼叫父類的構造方法之前,需要給本類的屬性設定初始值
3. 呼叫父類的建構函式,給父類的屬性分配空間設定初始值
NSObject 沒有屬性,只有一個成員變數 “isa”
4. 如果過載建構函式以後,並沒有實現父類方法 init(),系統不再提供init()(預設會有)
- 因為,預設的建構函式不能給本累的屬性分配空間
*/
class Person: NSObject {
var name: String
// 重寫 父類有這個方法,需要擴充套件
override init() {
// 問題1:name所有的初始值都是 zhang!
name = "zhang";
print("Person init");
super.init();
}
// 過載 函式名相同,引數和個數不同
// 給自己的屬性,在外部設定值
// oc沒有過載
init(name: String) {
self.name = name;
super.init();
}
}
//
// Student.swift
import UIKit
class Student: Person {
var num: String;
init(name: String, num: String) {
self.num = num;
//呼叫父類的建構函式,給name初始化
super.init(name: name);
}
}