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这个父类在定义name\age属性时,不知道一个确定的、具体的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
swift_Class类的继承的更多相关文章
- UML类图(上):类、继承和实现
面向对象设计 对于一个程序员来说,在工作的开始阶段通常都是别人把东西设计好,你来做.伴随着个人的成长,这个过程将慢慢变成自己设计一部分功能来实现,自己实现.如果要自己设计,无论是给自己看,还是给别人看 ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- (转)Java:类与继承
原文地址: http://www.cnblogs.com/dolphin0520/p/3803432.html 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大 ...
- iBatis.net 类的继承extends和懒加载
<resultMaps> <resultMap id="FullResultMap" class="t_c_team_member_permission ...
- python 类定义 继承
0 前言 系统:win7 64bit IDE : python(x,y) 2.7.6.1 IDE集成的解释器:Python 2.7.6 (default, Nov 10 2013, 19:24:18) ...
- JS原型继承和类式继承
前言 一个多月前,卤煮读了一篇翻译过来的外国人写的技术博客.此君在博客中将js中的类(构造)继承和原型继承做了一些比较,并且得出了结论:建议诸位在开发是用原型继承.文中提到了各种原型继承的优点,详细的 ...
- Java编程里类的继承
今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成 ...
- Java:类与继承
Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封装.继承.多态这四大特性都离不开类,只有存在类,才能体现面向对象编程的特点,今天我们就来了解一些类与继承的相关知 ...
- C#类的继承,方法的重载和覆写
在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...
随机推荐
- .NET 泛型分析
.NET 泛型解析 一.问题背景 我们在编程的时候往往因为需要处理不同类型的数据或者对象,重复编写很多类似的代码,造成代码的冗余,代码也显得不那么优雅,泛型的出现,正好是为了解决这个问题,实现继承. ...
- YbSoftwareFactory 代码生成插件【二十二】:CMS基础功能的实现
很多网友建议在YbRapidSolution for MVC框架的基础上实现CMS功能,以方便进行内容的管理,加快前端页面的开发速度.因此花了一段时间,实现了一套CMS内容发布系统并已集成至YbRap ...
- JSON.stringify()
概述 JSON.stringify() 方法可以将任意的 JavaScript 值序列化成 JSON 字符串. 语法 JSON.stringify(value[, replacer [, space] ...
- [转]Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法
问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository ...
- Android 获取渠道名称
直接看代码, //获取渠道名称public static String getChannelName(Activity ctx) { if (ctx == null) { return null; } ...
- MVC简单分层思想(连接数据库)
图片内容是所有的包名,文件名. 1.创建(M)模型 package oa.bean; public class User { private String userName; private Stri ...
- JS IOS/iPhone的Safari不兼容Javascript中的Date()问题
var date = new Date('2016-11-11 11:11:11'); document.write(date); 最近在写一个时间判断脚本,需要将固定好的字符串时间转换为时间戳进行比 ...
- 如何在Python中实现这五类强大的概率分布
R编程语言已经成为统计分析中的事实标准.但在这篇文章中,我将告诉你在Python中实现统计学概念会是如此容易.我要使用Python实现一些离散和连续的概率分布.虽然我不会讨论这些分布的数学细节,但我会 ...
- [Dynamic Language] 用Sphinx自动生成python代码注释文档
用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...
- mysql 查询表,视图,触发器,函数,存储过程
1. mysql查询所有表: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名' AND TAB ...