Swift基础(七):继承、构造过程

本文介绍Swift语言中的继承机制与构造过程,包括重写方法、属性的重写与观察器、不同类型的构造器如指定构造器、便利构造器、可失败构造器及必要构造器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:

1.继承:重写等

2.构造过程:指定构造器、便利构造器、可失败构造器、必要构造器等




//1.继承

//重写

class Animal

{

    var age:Int = 0;

    var weight:Double = 0.0;

    func shout()

    {

        print("animal shout!");

    }

};

class Dog : Animal

{

    

    var shoutContent:String

    {

        return "Dog bark!";

    }

    override func shout()

    {

        print(shoutContent);

    }

};

var dog = Dog();

dog.shout();

//重写属性gettersetter以及属性观察器


class Person

{

    var name: String; //存储属性

    var age: Int ; //存储属性

    var height: Double;

    

    func description() -> String

    {

        return "\(name) 年龄是: \(age),高度是:\(height)";

    }

    

    init (name: String, age: Int ,height: Double)

    {

        self.name = name;

        self.age  = age;

        self.height = height;

    }

}


class Student: Person

{

    

    var school: String;

    override var height: Double

    {

        willSet

        { //如果只关注修改之前的调用,可以只重写willSet观察者

            print("学生身高新值:\(newValue)");

            

        }

        didSet

        { //如果只关注修改之后的调用,可以只重写didSet观察者

            print("学生年身高旧值:\(oldValue)");

        }

    }

    override var age: Int

    { //重写属性前面要添加override关键字

        get

        {

            return super.age;

        }

        set

        {

            super.age = newValue < 8 ? 8: newValue;

        }

       

    }

    convenience init()

    {

        self.init(name: "Tony", age: 18,height: 172, school: "清华大学");

    }

    

    init (name: String, age: Int,height: Double, school: String)

    {

        self.school = school;

        super.init(name: name, age: age,height: height);

    }

}

let student = Student();

student.height = 175;

//防止重写:在属性前加上final


//2.构造过程

//存储属性的构造:默认属性值、构造器

class TestClass

{

    var name: String; //存储属性

    var age: Int ; //存储属性

    var temperature = 32.0; //默认属性值

    init (name: String, age: Int)//构造器

    {

        self.name = name;

        self.age  = age;

    }

};


//带外部和内部参数名的构造器和不带外部参数的构造器、可选属性、构造器改变常量属性值

class TestClass2

{

    var temperatureInCelsius: Double = 0.0;

    var response: String?;//可选属性,默认初始化为nil

    let text: String;

    init(fromKelvin kelvin: Double)//带外部参数名

    {

        temperatureInCelsius = kelvin - 273.15;

        self.text = "tst";//构造器内部可以初始化let常量属性,改变常量值

    }

    init(_ celsius: Double)//不带外部参数名

    {

        temperatureInCelsius = celsius;

        self.text = "tst";//构造器内部可以初始化let常量属性,改变常量值

    }

};


//类的继承和构造过程

class Vehicle

{

    var numOfWheels:Int = 0;

    var description:String

    {

        return "\(numOfWheels) wheels!";

    }

}

class Bicycle : Vehicle

{

    override init()

    {

        super.init();

        numOfWheels = 2;

    }

};

var bicycle = Bicycle();

print("\(bicycle.description)");


//指定构造器:能调用父类Init,不能调用本类的其他init构造器

//便利构造器(convenience):内部可调用其他init构造器,包括父类的init

//指定构造器和便利构造器

class Food

{

    var name:String;

    init(name:String)

    {

        self.name = name;

    }

    convenience init()

    {

        self.init(name:"[Unnamed]");

    }

}

let namedMeat = Food(name: "bacon");

let unNamed = Food();

class Milk : Food//继承父类的所有指定构造器和便利构造器

{

    var quantity : Int;

    init(name:String,quantity:Int)

    {

        self.quantity = quantity;

        super.init(name: name);

    }

    override convenience init(name:String)

    {

        self.init(name:name,quantity:1);

    }

}

let milkQuantity = Milk(name:"[milk]",quantity: 2);

milkQuantity.name;

milkQuantity.quantity;

//可失败构造器

class Car

{

    let name:String;


    init?(name:String)

    {

        self.name = name;

        if(name.isEmpty)

        {

            

            return nil;

        }

    }

}

let testCar = Car(name:"");//nil


class Product

{

    let name: String!;//name 属性有个默认值 nil

    init?(name: String)

    {

        self.name = name;

        if name.isEmpty { return nil; }

    }

}

let product = Product(name:"");

product?.name;

//可失败构造器 init!()

//必要构造器:require,所有子类必须重写该构造器

class SomeClass

{

    required init()

    {

        // 在这里添加该必要构造器的实现代码 

    }

}

class SomeSubclass: SomeClass

{

    required init()//不需要override

    {

        // 在这里添加子类必要构造器的实现代码 

    }

}

//通过闭包和函数来设置属性值














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值