美文网首页
swift中的继承与多态

swift中的继承与多态

作者: 千伞万伞 | 来源:发表于2019-11-20 15:48 被阅读0次

在面向对象编程开发的时候常用的两个思想即继承与多态,最近学到这块,就整理一下,有心人一起学习,另附我学习swift时候常用的两个网站如下:
文档
视频

  • 定义基类
class A
{
}
  • 定义子类 B
class B : A
{
    var name:String
    
    init(name:String) {
        self.name = name
    }
    
    func printName()
    {
        print("B对象的name: " + self.name)
    }
}
  • 定义子类 C
class C : A
{
    var name:String
    
    init(name:String) {
        self.name = name
    }
    
    func printName()
    {
        print("C对象的name: " + self.name)
    }
}
  • 定义方法,获取A对象
//  注意返回类型是A类型
func getObject(param:Int) -> A
{
    if param > 10 {
        return B(name: "小B")
    } else {
        return C(name: "小C")
    }
}

对象的相等性判断

var fyObj = getObject(param: 5) // 本句相当于 var obj:A = getObject(param: 5)
if fyObj is B
{
    let p = fyObj as! B
    p.printName()
}
if fyObj is C {
    let p = fyObj as! C
    p.printName()
}

swift提供了方便的可选项绑定

var obj:A = getObject(param: 15)
// 可选项绑定
if let p = obj as? B {
    p.printName()
}else if let p1 = obj as? C {
    p1.printName()
}

swift中的扩展:extension

// 扩展
extension A
{
    var age:Int
    {
        return 1
    }
    // 计算属性,以上写法默认get 方法,并且代表只读,强行set 会出现变异错误:Cannot assign to property: 'age' is a get-only property,以上代码相当于
//    var age1:Int
//    {
//        get
//        {
//            return 1
//        }
//    }
    func toString(param:Int) -> String
    {
//        self.age = param // Cannot assign to property: 'age' is a get-only property
        let str = String(param)
        return str
    }
    /**  同时也可以扩展类型方法(其实就是OC中常说的类方法),另:
         static 自带final 属性,是不可被重写的
         class 也可用于声明类型方法,允许子类重写
         所以static 相当于 final class
    */
    static func toString()
    {
        print(type(of: self))
    }
}

var a = A()
print(a.age) // 1
print(a.toString(param: 5)) // 5

A.toString() // A.Type

重写

class D: C {
    var nickName: String = "Hi😄我是D "
    override var description: String{
        return nickName + super.description
    }
    override func printName() {
        print("D 对象的nickName为:\(nickName)" + name)
    }
    // 重写属性观察器,如果name重新设置,则会调用printName方法
    override var name: String{
        didSet
        {
            printName()
        }
    }
}
var d = D(name: "d")
print(d.description) // 打印:Hi😄我是D hello,我是C
d.printName() // 打印:D 对象的nickName为:Hi😄我是D d
d.name = "我还是D,只是我长大了" // 打印:D 对象的nickName为:Hi😄我是D 我还是D,只是我长大了

在学习的过程中,我只是对觉着需要整理的地方做整理,以便以后自己能够做到有的放矢,同时也能方便他人能够在短时间内学习到重点的知识点,向原创致敬

相关文章

  • swift中的继承与多态

    在面向对象编程开发的时候常用的两个思想即继承与多态,最近学到这块,就整理一下,有心人一起学习,另附我学习swift...

  • iOS复习之重写与重载

    iOS面向对象的三大特征 封装、继承、多态 Swift-重写与重载的使用和比较

  • 面向对象

    继承与多态

  • 《Java8学习笔记》读书笔记(七)

    第6章 继承与多态 学习目标 了解继承的目的 了解继承与多态的关系 知道如何重写方法 认识java.lang.Ob...

  • JAVA(9)继承与多态

    继承与多态 、抽象类、接口 继承: 继承是类与类的一种关系 java中的继承是单继承 继承的好处: 子类拥有父类的...

  • 【Golang】封装,继承与多态

    面向对象的基本思想主要体现在封装,继承以及多态等的设计与运用上。这篇文章主要讲述,封装、继承与多态在golang中...

  • 程序组第二次作业代码

    继承与多态: 接口作业:

  • java中的继承与多态

    1、 什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法...

  • 多态

    OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态...

  • js-继承和闭包

    继承和闭包 一、面向对象的三大特征 封装 继承 多态 二、什么是继承 继承是面向对象软件技术当中的一个概念,与多态...

网友评论

      本文标题:swift中的继承与多态

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