//
// 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);
}
}