设为首页 加入收藏

TOP

构造方法 (2)(一)
2017-10-10 12:14:01 】 浏览:7207
Tags:构造 方法

/*

 继承与构造方法:

 指定构造与便利构造器方法

 */

 

class Person {

    var name:String

    var age:Int

    //指定构造方法都是以init开头

    init(name:String, age:Int)

    {

        self.name = name

        self.age = age

    }

    //1.如果是值类型没问题, 称之为构造器代理;

    //2.但是如果是引用类型报错, 需要在前面加上 convenience关键字;

    //3.被convenience关键字修饰的构造方法称之为便利构造器, 通过调用其他构造方法来初始化;

    //4.反而言之, 便利构造器中一定是调用其他构造方法初始化的, 一定要出现self.init

    convenience init()

    {

        self.init(name: "hjq", age: 26)

    }

    //类可以拥有多个构造方法

    init(name:String)

    {

        self.name = name

        self.age = 0

        //不能再指定构造方法中调用便利构造器方法

        //换言之,指定构造方法中不能出现self.init

//        self.init()

    }

    

    convenience init(age:Int)

    {

        //可以在便利构造器中调用指定构造器

//        self.init(name: "hjq", age: 24)

        self.init()

    }

    // 便利构造器不能和指定构造器同名

    //    convenience init(name:String)

    //    {

    //    }

}

 

 

/** 派生类的构造方法 **/

 

class Man {

    var name:String

    //指定构造方法

    init(name:String)

    {

        self.name = name

    }

    convenience init(){

        self.init(name: "hjq")

    }

}

class SuperMan: Man {

    var age:Int

    

    // 注意:

    // 1.默认情况下构造方法不会被继承

    // 2.基类的存储属性只能通过基类的构造方法初始化

    // 3.初始化存储属性时必须先初始化当前类再初始化父类

    // 4.不能通过便利构造方法初始化父类, 只能通过调用指定构造方法初始化父类

    //指定构造器

    init(age:Int) {

        self.age = age

        super.init(name: "han")

//        super.init()

    }

}

 

/*

 构造器间的调用规则:

 1.指定构造器必须调用其直接父类的"指定构造器"

 2.便利构造器必须调用同类中的其他便利构造器(指定或者便利)

 3.便利构造器必须最终调用一个指定构造器结束(无论指定还是便利, 最终肯定调用一个指定构造器)

 4.指定构造器总是横向代理(父类)

 5.便利构造器总是横向代理(子类)

 */

 

class Man2 {

    var name:String

    //指定构造器

    init(name:String) {

        self.name = name

    }

    convenience init(){

        self.init(name: "HaRi")

    }

}

class SuperMan2: Man2 {

    var age:Int

    //指定构造器

    init(age:Int) {

        self.age = age

        super.init(name: "xiaohange")

    }

    convenience init()

    {

        self.init(age: 25)

    }

    convenience  init(name: String, age: Int) {

        //调用子类构造器一定能够初始化所有属性

//        self.init(age: 30)

        //便利构造器中只能通过self.init来初始化, 不能使用 super.init

  &

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇运算符 下一篇析构方法 deinit

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目