zoukankan      html  css  js  c++  java
  • swift_Class类的继承

    //: Playground - noun: a place where people can play

    var str = "Hello, playground"

    //*****************************Class类的继承

     定义一个父类

    swift代码:

    class Parent{
        //定义一个属性
        var name :String?
    //定义方法a func a(){ print("这里是父类的方法a") }
    func b(){ print("这里是父类的方法b") } }

    再定义个子类来继承父类Parent

    语法就是使用:冒号

    swift代码:

    class Child :Parent{
        //因为父类中有方法a
        //子类中又有一个方法a
        //所以需要使用关键字override来表示这个方法是父类的方法a,在子类中重写父类的方法a
        override func a(){
            print("这里是子类继承的父类的方法a")
        }
    }

    继承的话,没什么多练的,大致上和Java是差不多的

    再来练习一对继承的例子

    /*    *************———————老师类 、、、、、、          */

    swift代码:

    class Teacher{
    
        //因为父类也是可以拥有自己独有并且私有的东西
        //在Swift_Class类的继承中,
        //使用final关键字,让属性,或者方法,变成这个Class类私有的属性跟方法,不让继承者去继承它们    
        //若这个属性在子类中不想变成计算属性,使用属性观察者
        //var name :String? = "Jack"
        //var age :Int? = 36
    var name :String? = "undefined" var age :Int? = 0 //介绍的方法 func introduce(){ print("大家好,我是高职部的老师,我叫(name!),今年(age!)岁,别看我年纪大,我还是很年轻的!?^_^") } //给学生上课的方法 //老师自己独有的方法 final func give(){ print("今天给大家讲Class类的继承") } //定义一个方法能让学生子类去继承的方法 //学习的方法 func study(){ print("希望大家能掌握这套方法去熟练掌握它变成自己的东西") } }

    //OK,现在,

    //定义一个子类,来继承那个老师类

    /*    ********————————————学生类 、、、、、、          */

    swift代码:

    class Student :Teacher{
    
        //使用:冒号,在后面写上父类的类名
        //这样,当前类就继承了那个类,成为了那个类的子类
        //也就是说,当前类就会拥有父类的一些属性、方法,说一些是因为父类会有自己私有、独有的方法,子类不能继承的
     
        //give,老师授课的方法是TeacherClass自己独有的方法,子类继承不了
       //override func give(){
      
       //}
    //因为在Teacher这个父类在定义nameage属性时,不知道一个确定的、具体的Value,类型后面加了?,属性成为了一个属性值可为空的属性 //所以子类重写该属性时,需要解包,把父类可为空的属性转成一个具体的类型 override var name: String!{ willSet{ print("name属性value将要赋值为(newValue!)") }
    didSet{ print("name属性value改变前的过期值:(oldValue!)") } }
    //override var name: String! = "Jason"
    //使用属性观察者,这个属性就是存储属性 override var age: Int!{ willSet{ print("age属性value将要赋值为(newValue!)") } didSet{ print("age属性value改变前的过期值:(oldValue!)") } } /******************************************* 小结: 为什么Teacher类中定义的name和age是存储属性 Student类继承Teacher类,重写name和age后,却变成了计算属性 原因很简单,Student这个子类,它不知道Teacher这个父类中定义的属性是存储属性还是计算属性 子类Student只知道父类Teacher中定义的属性的名字和类型
    这就是为什么父类Teacher被Student类继承后,子类Student将父类Teacher的存储属性重写成了计算属性 如果子类Student重写父类Teacher属性时,就是要重写成为存储属性,使用属性观察者 *******************************************/ //重写父类Teacher介绍的方法 //学生也可以向老师一样来介绍自己 override func introduce() { print("大家好,我是(name!),今年(age!)岁") } //重写父类Teacher学习的方法 //学生可以去把它掌握 override func study(){ print("好简单啊@!!3分钟就掌握了") } }

     

    使用Teacher类和Student类

    swift代码:

    //************老师对象
    let chenJun = Teacher()
    chenJun.name! = "Tom"
    chenJun.age! = 36
     
    //介绍自己
    chenJun.introduce()
    
    //授课
    chenJun.give()
    
    //授予学习的方法
    chenJun.study()
    
    //************学生对象
    let me = Student()
    me.name! = "张三"
    me.age! = 21
    
    //介绍自己
    me.introduce()
    
    //掌握学习的方法
    me.study()
    

    代码执行结果:

    大家好,我是高职部的老师,我叫Tom,今年36岁,别看我年纪大,我还是很年轻的!?^_^
    今天给大家讲Class类的继承
    希望大家能掌握这套方法去熟练掌握它变成自己的东西
    name属性value将要赋值为张三
    name属性value改变前的过期值:undefined
    age属性value将要赋值为21
    age属性value改变前的过期值:0
    大家好,我是张三,今年21岁
    好简单啊@!!3分钟就掌握了
    

    /*****************************************************

        总结:

            swift中Class类的继承

                1>只能单继承

                2>重写父类属性、函数,需要使用Override表示

                3>swift中所有的类都不可以继承Object

                4>使用finl定义自己私有属性、函数,阻止子类重写

                5>swift当前的版本没有抽象类的定义,包括抽象方法

    ******************************************************/

    —————————————over

  • 相关阅读:
    apache重写规则自动追加查询参数QSA
    错误代码2104:无法下载Silverlight应用程序。请查看Web服务器设置
    eclipse的shell相关插件
    二叉树及排序二叉树的相关操作汇总
    约瑟夫环
    c++ 输入一行字符串
    类对象做函数参数(传值和传引用)
    运算符重载(=和+)
    char型字符串(数组)与string型字符串 指针与引用
    一维和二维数组 动态内存分配
  • 原文地址:https://www.cnblogs.com/LiJinfu/p/6089950.html
Copyright © 2011-2022 走看看