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 的。这样的类是不可被继承的,试图继承这样的类会导致编译报错
  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/LeeGof/p/5681085.html
Copyright © 2011-2022 走看看