zoukankan      html  css  js  c++  java
  • 13.继承

      一个类可以继承另一个类的方法、属性和其它特性。当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。

      在 Swift 中,类可以调用和访问超类的方法、属性和下标,并且可以重写(override)这些方法、属性和下标来优化或修改它们的行为。

    1.定义一个基类:不继承于其它类的类,称之为基类

    • Swift 中的类并不是从一个通用的基类继承而来。如果你不为你定义的类指定一个超类的话,这个类就自动成为基类。这点和OC不同,OC中有一个超类NSObject。
    class SomeSuperclass
    {
        //这里是基类的定义
    }

    2.子类生成:为了指明某个类的超类,将超类名写在子类名的后面,用冒号分隔

    • 子类生成指的是在一个已有类的基础上创建一个新的类。子类继承超类的特性,并且可以进一步完善。 
    class SomeClass: SomeSuperclass
    {
        //这里是子类的定义
    }

    3.重写:如果要重写某个特性,必须在重写定义的前面加上override关键字。

    • 子类可以为继承来的实例方法、类方法、实例属性、或下标提供自己定制的实现

      【说明】:在合适的地方,可以通过使用super前缀来访问超类版本的方法,属性或下标:

    • 在方法someMethod()的重写实现中,可以通过super.someMethod()来调用超类版本的someMethod()方法。
    • 在属性someProperty的 getter 或 setter 的重写实现中,可以通过super.someProperty来访问超类版本的someProperty属性。
    • 在下标的重写实现中,可以通过super[someIndex]来访问超类版本中的相同下标。
    class SuperClass
    {
        var iTemp = 0;
        
        func temp()
        {
            print("SuperClass");
        }
        
        //使用关键字class的类方法可以被重写
        class func testCanOverride()
        {
            print("SuperClass  testCanOverride");
        }
        
        //使用关键字static的类方法不可以被重写
        static func testCanNotOverride()
        {
            print("SuperClass  testCanNotOverride");
        }
    }
    
    class ChildrenClass: SuperClass
    {
    //        override var iTemp = 3;  //错误:子类重写必须为计算属性
        
        override var iTemp: Int
            {
            get {
                return 3;
            }
            set {
                self.iTemp = newValue;
            }
        }
        
        override func temp()
        {
            print("ChildrenClass");
        }
        
        override class func testCanOverride()
        {
            super.testCanOverride();  //先打印父类的对应方法
            print("ChildrenClass testCanOverride");
        }
    }
    
    ChildrenClass.testCanOverride();

      【注意】:

    1. 类方法是使用关键字class修饰的方法(子类可以重写),也可以使用static修饰(子类不可以重写),这时子类就不能重写。static相当于class+final的作用
    2. 子类可以将父类的存储属性和计算属性进行重写,子类重写必须为计算属性(提供gettersetter
    3. 子类可以将只读属性重写为可读写的(提供gettersetter),但是不能将父类的读写属性重写为只读属性(只提供getter
    4. 不能对一个父类let修饰的存储属性在子类中进行重写。因为常量在定义时就被赋值。

    4.防止重写

    • 可以通过把方法,属性或下标标记为final来防止它们被重写,只需要在声明关键字前加上final修饰符即可(例如:final varfinal funcfinal class func,以及final subscript;
    • 在关键字class前添加final修饰符(final class)来将整个类标记为 final 的。这样的类是不可被继承的,试图继承这样的类会导致编译报错
  • 相关阅读:
    error C2143: syntax error : missing ';' before 'type'
    【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
    【剑指Offer面试编程题】题目1362:左旋转字符串--九度OJ
    【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ
    【剑指Offer面试编程题】题目1354:和为S的连续正数序列--九度OJ
    【剑指Offer面试编程题】 题目1350:二叉树的深度--九度OJ
    Oracle个人自学笔记
    【转载】Oracle sqlplus中最简单的一些命令,设置显示的格式
    IntelliJ IDEA常用快捷键大全
    凤凰系统(Phoenix OS)PC版安装,电脑上体验功能丰富的安卓系统
  • 原文地址:https://www.cnblogs.com/LeeGof/p/5681085.html
Copyright © 2011-2022 走看看