美文网首页iOS必须SwiftiOS DeveloperiOS 开发
swift 9: 父类的构造器重写、required关键字

swift 9: 父类的构造器重写、required关键字

作者: 前进的苏辰 | 来源:发表于2016-08-13 16:58 被阅读980次

1重写父类的构造器

class Person{
    var name: String
    var color: String
    
    //指定构造器
    init(name: String, color: String){
        self.name = name
        self.color = color
    }
    
    init(){
        self.name = "小明"
        self.color = "小黄人"
    }
    
    //便利构造器
    convenience init(name:String){
        self.init(name: name, color: "黑人")
    }
}

//对父类的构造器进行重写

class Man: Person {
    var height: Double
    
    //如果子类方法和父类方法同名,编译器默认它为重写方法
    override init(name: String, color: String) {
        //对自身的属性进行初始化
        height = 1.80
        
        //调用父类的构造方法对从父类继承的属性进行初始化
        super.init(name: name, color: color)
    }
    
    override init() {
        height = 1.75
        super.init(name: "小花", color: "白人")
    }
    
    //子类永远不能直接访问父类中的便利构造器,所以此处定义的构造方法不是重写方法
    init(name: String){
        height = 1.70
        super.init()
        self.color = "yellow"
        self.name = "Lilei"
    }
}

var m = Man(name: "hello", color: "world")

2required关键字

1:required关键字,只能用于修饰构造方法

2: 【提问】 继承中required修饰的构造方法是否是必须实现的方法?

class Fruit{
    var name: String
    
    required init(name: String){
        self.name = name
    }
    
    required convenience init(){
        self.init(name: "水果")
    }
class Pear: Fruit {
    var weight: Double = 0.0
}
//1.当子类没实现任何构造方法,编译器就会认为子类可以使用父类中的所有指定构造器,required修饰的构造方法在子类中可以不写
var xpear = Pear.init(name: "梨")


//2.当子类中定义了异于父类中的构造方法(参数名称不同、参数个数不同、参数类型不同),
//那么父类中使用required修饰的构造方法在子类中必须实现,而且这个方法必须使用required关键字而不能使用override修饰
class Apple: Fruit {
    var sweet: String = ""
    
    init(sweet:String){
        self.sweet = sweet
        super.init(name: "apple")
    }
    
    required init(name: String) {
        self.sweet = ""
        super.init(name: name)
    }
}

相关文章

  • swift 9: 父类的构造器重写、required关键字

    1重写父类的构造器 //对父类的构造器进行重写 2required关键字 1:required关键字,只能用于修饰...

  • Swift-必要构造器

    必要构造器 在类的构造器前添加required修饰符表明所有该类的子类都必须实现该构造器: 在子类重写父类的必要构...

  • Swift子类重写父类构造函数

    swift中子类重写父类构造方法: 如果父类没有指定构造方法(带参数的构造方法), 子类重写父类构造方法就不需要调...

  • iOS9 with Swift 类的构造器(三)

    重写构造器: 在子类中,父类的构造器是可以被重写的,并且依照如下的规定: 1、Signature与父类的便利构造器...

  • 必要构造函数

    必要构造函数在类的构造函数前添加required 修饰符来表明表明它是一个必要构造函数.注意:当子类重写父类的必要...

  • Swift开发中构造函数几点说明

    一、Swift支持overload重载 二、构造函数 带有override前缀的init都是重写继承了父类的构造函...

  • Swift5 构造函数知识点总结

    Swift 为类提供了两种构造器,分别是指定构造器和便利构造器。 指定构造器必须总是向上代理(重写、重载) 便利构...

  • 子类继承父类函数

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。子类不重写 init,实例...

  • Swift:required修饰符的使用

    1. required关键字,只能用于修饰构造方法; 2. 当子类含有不同于父类的构造方法时(参数名称不同、参数个...

  • Swift类构造器的继承和重写

    继承 Swift中默认情况下,子类不会自动继承父类的构造器,只有在安全和适当的情况下,子类会自动继承父类的构造器。...

网友评论

    本文标题:swift 9: 父类的构造器重写、required关键字

    本文链接:https://www.haomeiwen.com/subject/zutysttx.html