swift学习笔记之继承

原创 2016年05月30日 10:55:40

//继承1防止代码冗余2扩展功能
//1继承的定义
//2继承属性
//3子类不仅可以继承父类的属性,还可以继承在属性中的添加的属性监视器
class StepCounter {
    var totalSteps:Int=0 {  //千万前面不能加lazy
        willSet(newTotalSteps) {
            print("新的值:\(newTotalSteps)")
        }

        didSet(old) {
            if (totalSteps > old) {
                print("与原来比增减了\(totalSteps - old)个值")
            }

        }

    }
}

class stepCounter:StepCounter {

}

let counter=stepCounter()
counter.totalSteps=10
counter.totalSteps=100

//4下标脚本的继承
class Sorce {
    var english:Int=130
    var chinese:Int=50
    var math:Int=90

    subscript(index:Int)->Int {
        get {

            switch index {
            case 0:
                return english
            case 1:
                return chinese
            case 2:
                return math
            default:
                return 0
            }

        }

    }
}

class childSorce: Sorce{

}
let myscore=childSorce()
print(myscore[0])
print(myscore[1])

//5方法的继承

//6继承的特点 在swift 中1>只支持单继承, 但一个父类可以多个子类,成树型结构2>不可以删除父类的属性


//7重写
//

class NewClass {

    var value:Int {// ~~1计算属性

    return 100
    }
    class var classValue:Int { //~~~2重写类型属性

     return 200
    }


}

class NewClass1: NewClass {
    override var value:Int {
    return 333
    }

    override class var classValue:Int {
    return 666
    }
}
let cls = NewClass1()
print(cls.value)
print(NewClass1.classValue)


// ~~~~3添加属性监视器


class Car {
    var speed:Double=0.00
}

class AutomicCar: Car {
    var gear = 1
    override var speed:Double {
        didSet {
        gear = Int(speed)
            print(gear)
        }
    }
}

let automic = AutomicCar()
automic.speed=34.00
automic.speed=6886.00

// ~~~~~4重写下标脚本
class childSorce111: Sorce{
    var value=0
    override subscript(index:Int)->Int {
    let count = index-value
        return count
    }
}
//~~~~~5重写方法

//重写的注意事项
//@1不可以省略override
//@方法相同才能重写 ,父类没有的,怎么重写


//8访问父类的成员
//  1>访问属性 super.属性名
//  2>访问下标脚本 suer[index]
//  3>访问方法 super.方法名(参数名)
//  4>访问类型属性



//9防止重写
// 将所有的属性,下标脚本,方法,类型属性 前面加一个 final (最终) 就可以达到防止子类重写了


//10类型检查
//类型检查是一种检查类实例的方式
//  1> 类型检查 is 
//   用法 实例 is 子类型
//       @1,不能总是true
//       @2 实例是特定的子类型

class ClassA {

}

class ClassA1:ClassA {
    var movie:String="hello"
}

class ClassA2:ClassA {
    var movie:String="hello"
}
class ClassA3:ClassA {
    var movie:String="hello"
}
class ClassA4:ClassA {
    var movie:String="hello"
}

class ClassB:ClassA {
    var movie:String="hello"
}
class ClassC {

}


let b = ClassB()
if b is ClassB { //总是truse
print("true")
}
else {
print("false")
}

let a = ClassA()
if a is ClassC {  //ClassC是基类
    print("true")
}
else {
    print("false")
}


//  2  as
//开发者希望程序在运行期间进行类型转换 ,这时就需要强制转化as 或者可选的类型检查符 as?
// 实例 as 类型

// >1强制类型的转换
let bb=ClassB()

let clsbb = bb as ClassB
print("clsbb.movie==\(clsbb.movie)")


//注意 @1相同类型的实例:在一个要检查类型的数组只可以存相同的类型
//
//let library = [ClassB(),ClassB(),ClassB(),ClassC()]
//
//for item in library {
//let cls = item as  ClassB
//    print(cls)
//}


//    @2不可以在条件语句使用


//  >2可选类型的转换 as?
//  当不确定转换是否可以成功的时候,可以使用as?


//AnyObject 和Any的检查
//对于一些类型不明确的类型,swift 提供了两种类型别名来检查,分别是AnyObject 和Any
//Any比AnyObject范围更广,除了方法类型


let library1 = [ClassA1(),ClassA2(),ClassA3(),ClassA4()]

for item in library1 {
let cls = item as  ClassA
    print(cls)
}

for item:AnyObject in library1 {
    let cls = item as! ClassA
    print(cls)
}
版权声明:版权所有,不得转载

《从零开始学Swift》学习笔记(Day 40)——析构函数

原创文章,欢迎转载。转载请注明:关东升的博客 与构造过程相反,实例最后释放的时候,需要清除一些资源,这个过程就是析构过程。在析构过程中也会调用一种特殊的方法deinit,称为析构函数。析构函数dein...
  • tonny_guan
  • tonny_guan
  • 2015年11月25日 10:28
  • 1974

swift面向对象之多态与继承

swift面向对象之多态与继承 1.多态 运行时多态 运行时多态的要点 1.要有继承关系的存在 2.子类要重写父类的方法 3.父类类型的引用指向子类实例 2.继承 1.继承的注...
  • qq_25491201
  • qq_25491201
  • 2016年04月27日 09:15
  • 1718

C++学习笔记48——继承中的构造函数

1,构造函数不能继承 这句开宗明义的话容易引起歧义,因为事实上基类的构造函数(一般为public)在派生类中是可见且可用的。如下例子所示: class Base4 { public: Base4...
  • yellowston
  • yellowston
  • 2016年02月24日 22:59
  • 414

java 中的继承学习笔记

一、为什么会有继承 在大千世界中存在继承,比如我们继承了5千年中华文化,也就是说我们具有对中华文化的基本特征,儿子继承了父亲母亲的基因等;在java中有时候会出现类似这种情况,多个类中存在相同的属性...
  • u010461609
  • u010461609
  • 2013年05月31日 08:11
  • 710

Swift 继承(十二)

继承 (Inheritance) 一个类可以继承另一个类的方法,属性和其他特特性,继承类叫子类,被继承叫父类,Swift中,类可以调用和访问父类的方法,属性和附属脚本,并且可以重写来修改他们的行...
  • huangchentao
  • huangchentao
  • 2014年06月20日 16:37
  • 3380

继承—Swift学习笔记(十六)

注:本文为自己学习The Swift Programming Language的笔记,其中的例子为引用原书和其他博文或自己原创的。每个例子都会批注一些实践过程中的经验或思考总结。 1.基础 继承...
  • u014030117
  • u014030117
  • 2014年07月02日 01:11
  • 1813

IOS开发语言Swift入门连载---继承

IOS开发语言Swift入门连载—继承一个类可以继承(inherit)另一个类的方法(methods),属性(property)和其它特性。当一个类继承其它类时,继承类叫子类(subclass),被继...
  • wangzi11322
  • wangzi11322
  • 2015年04月27日 15:38
  • 1072

Swift:面向对象(继承与构造方法)

一、 继承 1.  Swift中定义的类,如果不继承自任何类,它就是基类。这一点和objective-c中定义的类不一样,在objective-c中定义的类默认的基类是NSObject。 2.  重写...
  • sinat_27706697
  • sinat_27706697
  • 2015年08月17日 11:15
  • 1028

Swift - 类的继承 & 访问权限

上一篇博客《Swift - Struct & Class》的博客可谓是给Swift中的类开了个头。关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限。说到类的继承,接触过面向对象编程(OO...
  • magic_castle
  • magic_castle
  • 2016年01月07日 22:10
  • 786

13.Swift-继承与重写

一个类可以继承另一个类的方法、属性和其他特性。在Swift中,继承是类区分与其他类型的一个基本特性。 在Swift中,子类可以调用和访问父类的方法、属性和附属脚本,并且可以通过重写这些方法、属性和附...
  • lqcjdx
  • lqcjdx
  • 2014年12月11日 15:57
  • 1930
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:swift学习笔记之继承
举报原因:
原因补充:

(最多只允许输入30个字)