1.首先创建一个Person的类 继承 NSObject类
//
// Person.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Person: NSObject {
var name: String
// 重写, 父类有这个方法
// 如果重载了构造函数,并且没有实现父类init方法,系统不再提供init() 构造函数(默认是会有的!)
// - 因为 默认的构造函数,不能给本类的属性分配空间
// 调用父类的构造函数之前,需要给本类的属性设置初始值
override init () {
print ( "Person init" )
// 问题: name 确实有初始值,但是所有的初始值是zhang!
name = "zhang"
super . init ()
}
// ‘重载’ 函数名相同,但是参数和个数不同
// - 重载可以给自己的属性从外部设置初始值!
// - 提问: OC有重载吗? 没有 initWithXXX
init (name: String ) {
// 使用参数的name 设置属性
self . name = name
// 调用父类的构造函数
super . init ()
}
// Person.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Person: NSObject {
var name: String
// 重写, 父类有这个方法
// 如果重载了构造函数,并且没有实现父类init方法,系统不再提供init() 构造函数(默认是会有的!)
// - 因为 默认的构造函数,不能给本类的属性分配空间
// 调用父类的构造函数之前,需要给本类的属性设置初始值
override init () {
print ( "Person init" )
// 问题: name 确实有初始值,但是所有的初始值是zhang!
name = "zhang"
super . init ()
}
// ‘重载’ 函数名相同,但是参数和个数不同
// - 重载可以给自己的属性从外部设置初始值!
// - 提问: OC有重载吗? 没有 initWithXXX
init (name: String ) {
// 使用参数的name 设置属性
self . name = name
// 调用父类的构造函数
super . init ()
}
}
2.创建一个Student类继承于Person类
//
// Student.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Student: Person {
/// 学号
var no: String
init (name: String ,no: String ){
self . no = no
// 调用父类的方法,给name初始化
super . init (name: name)
}
// Student.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
class Student: Person {
/// 学号
var no: String
init (name: String ,no: String ){
self . no = no
// 调用父类的方法,给name初始化
super . init (name: name)
}
}
3.在ViewController上调用
//
// ViewController.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
/**
在Swift 中,默认同一个项目中(同一个命名空间下),所有的类都是共享的,可以直接访问,不需要import
所有对象的属性 var, 也可以直接访问到
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
// 实例化 person
// () -> alloc/init
// Swift 中对应一个函数 init() 构造函数
// 作用: 给成员变量分配空间,初始化成员变量
// let p = Person(name: "老王")
//
// print(p.name)
let s = Student (name: "老王" , no: "010" )
print (s. name + "-----" + s. no )
}
// ViewController.swift
// 008-构造函数
//
// Created by 庄壮勇 on 2018/1/8.
// Copyright © 2018年 Personal. All rights reserved.
//
import UIKit
/**
在Swift 中,默认同一个项目中(同一个命名空间下),所有的类都是共享的,可以直接访问,不需要import
所有对象的属性 var, 也可以直接访问到
*/
class ViewController: UIViewController {
override func viewDidLoad() {
super . viewDidLoad ()
// 实例化 person
// () -> alloc/init
// Swift 中对应一个函数 init() 构造函数
// 作用: 给成员变量分配空间,初始化成员变量
// let p = Person(name: "老王")
//
// print(p.name)
let s = Student (name: "老王" , no: "010" )
print (s. name + "-----" + s. no )
}
}