Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写

前面我们讲了有关于脚本语法的基本认识以及使用, 现在让我们来看看Swift的其他东西:


1.基类

所谓的基类, 就是OC中的父类, 不继承任何类, 就叫做基类, 让我们来看看例子:

class Vehicle {var currentSpeed = 0.0var description: String {return "traveling at \(currentSpeed) miles per hour"}func makeNoise() {}
}let someVehicle = Vehicle()
println("someVehicle: \(someVehicle.description)")
// 打印出来的结果: someVehicle: traveling at 0.0 miles per hour

PS: 这个类虽然是没有什么意义, 但它的的确确是一个基类, 在Swift中, 如果你没有在这个类名后面继承与什么什么类, 那么就会自动的变成基类.


2.子类生成

所谓的子类, 其实和OC中的子类一样的, 它是基于基类所新建的一个类, 这个类就叫做子类, 它拥有父类的所有特性, 同时它又可以有属于自己的特性, 下面让我们来看看例子:

class Bicycle: Vehicle {var hasBasket = false
}let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15
println("bicycle: \(bicycle.description)")
// 打印出来的结果: bicycle: traveling at 15.0 miles per hour

PS: 上面的例子就是Vehicle类的子类, 它继承与Vehicle的所有特性, 可以调用Vehicle类里面的变量, 方法,等等, 同时它又有自己的属性.


3.重写方法

在子类中, 虽然拥有父类的所有特性, 但在实际开发中, 有一些特殊的情况, 父类的方法不能满足于子类的需求, 但我们又不想去更改父类的方法, 那么我们可以选在在子类里去重写父类的方法, 比如:

class Car: Vehicle {var gear = 1override var description: String {return super.description + " in gear \(gear)"}
}let car = Car()
car.currentSpeed = 25.0
car.gear = 3
println("Car: \(car.description)")
// 打印出来的结果: Car: traveling at 25.0 miles per hour in gear 3

PS: 没错, 有些眼睛犀利的朋友就看到了, 在Car这个子类里, 有一个方法名和父类的方法名是一样的, 但在这个方法名前面, 加了一个override这个关键字, 这个就是Swift中的重写关键字.


4.重写属性

在Swift中, 既然能重写父类的方法, 那当然也是可以重写父类的属性了, 让我们来看看例子:

class SpeedLimitedCar: Car {override var gear: Int {get {return super.gear}set {super.gear = 2}}
}
let limitedCar = SpeedLimitedCar()
limitedCar.gear = 60println("SpeedLimitedCar: \(limitedCar.gear)")
// 打印出来的结果: SpeedLimitedCar: 2

PS: 这里需要注意一点的就是, 必须通过get和set这种特性的方式来重写父类的属性.


5.防止重写

在上面的例子中, 如果我有某个类的属性或者方法不想被重写, 只要在基类定义的时候在前面加一个final关键字就可以防止被重写, 下面让我们来看看例子:

class Car: Vehicle {final var gear = 0final override var description: String {return super.description + " in gear \(gear)"}
}class SpeedLimitedCar: Car {override var description: String {return "重写了"}override var gear: Int {get {return super.gear}set {super.gear = 2}}
}
// 报错: Var overrides a 'final' var

报错


好了, 这次我们就讲到这里, 下次我们继续~

转载于:https://www.cnblogs.com/iOSCain/p/4529358.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习1k近邻

自己一直学习计算机视觉方面的东西,现在想学习一下数据挖掘跟搜索引擎,自己基础也有点薄弱,看朱明的那本数据挖掘,只能片面的了解这个数据挖掘。不过最近有一本书 机器学习实战,于是乎通过实战的形式了解一下基本的算法…

mysql服务器的线程数查看方法_MySQL服务器线程数的查看方法详解

本文实例讲述了MySQL服务器线程数的查看方法。,具体如下:mysql重启命令:/etc/init.d/mysql restartMySQL服务器的线程数需要在一个合理的范围之内,这样才能保证MySQL服务器健康平稳地运行。Threads_created表示创建过的线程数&…

[No000003]现代版三十六计,计计教你如何做人

《现代版三十六计,计计教你如何做人》 …………………………………………………………………………………… 第1计施恩计 在人际交往中,见到给人帮忙的机会,要立马扑上去,像一只饥饿的松鼠扑向地球上的最后一粒松籽. 因为人情就是财富,人际关系一个最基本的目的就是结人情,有人…

mysql 重置root密码 远程访问_重置mysql的root密码以及设置mysql远程登陆权限

root密码忘记,重置mysql的root密码:t一、修改mysql的配置文件my.cnf1.在[mysqld]的段中加上一句:skip-grant-tables[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockskip-name-resolveskip-grant-tables保存并且退出vi。(或执行…

C#中枚举类型和int类型的转化

先定义一个枚举类型 public enum PropertyType { 小学 0, 初中, 高中&#xff0c;大学 }; int ->enum int d2; PropertyType a(PropertyType)d; int <- enum PropertyType d PropertyType.小学; int a Convert.ToInt32(d); Enum类有关的方法 E…

vagrant使用centos的环境安装..

vagrant这货挺好用的..简要就是, 下好virtualbox, vagrant, 然后下个你需要的box. 然后vagrant box add boxname boxpath就行. 然后在合适的地方vagrant init就能创建好虚拟机, 然后vagrant up是开启, vagrant ssh是通过ssh连接过去, 可以装一个zsh , 配置oh my zsh啥的, 然后安…

linux mysql odbc驱动安装_MySQL ODBC 驱动安装

阅读目录一、在线安装1、yum在线安装驱动2、配置驱动3、测试连接二、编译安装1、MySQL创建测试用户和测试库2、安装驱动3、配置驱动4、测试一、在线安装1、yum在线安装驱动# yum -y installunixODBC#yum -y install mysql-connector-odbc2、配置驱动(1)查看驱动程序相关信息# c…

通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全

编辑人员注释&#xff1a;本文章由 Windows Azure 网站团队的项目经理 Erez Benari 撰写。 随着身份盗窃和各种形式的网络犯罪迅速增多&#xff0c;使用安全套接字层 (SSL) 对网站进行保护变得越来越重要和普遍。如果将网站托管在 Windows Azure 网站 (WAWS) 上&#xff0c;您可…

mysql之多表查询

今天在项目中遇到一个数据库查询的问题&#xff1a;三张表分别放置不同的东西&#xff1a;分享的音频相关数据、分享的文字图片说说、分享的主题相关数据。所有分享的东西都可看做新鲜事&#xff0c;现在要求从这三张表将相同的几个字段的数据全部查找出来按照发布时间先后排序…

设立SharePoint2010列表的项目级权限

设置SharePoint2010列表的项目级权限 在SharePoint2010中我们经常会用到这样的权限设置&#xff0c;在一个列表中可以存储多个人输入的数据&#xff0c;但每个人只能看到自己的那部分数据。也就是多个人共同维护一个列表&#xff0c;但各自只能查看、编辑、删除自己录入的那部分…

MySQL优化filler值_MySQL 性能优化神器 Explain 使用分析

简介MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了, 例如:EXPLAIN SELECT * from user_info WHERE id < 300;准备为了接下来方便…

Codeforces Round #224 (Div. 2)

题目&#xff1a;http://codeforces.com/contest/382 A Ksenia and Pan Scales 一个求天平是否能够平衡的题目。。。水题,注意一下结果的输出就行。 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 #include <cstdlib>5 #include <…

二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...

日常中我们见到的二叉树应用有&#xff0c;Java集合中的TreeSet和TreeMap&#xff0c;C STL中的set、map&#xff0c;以及Linux虚拟内存的管理&#xff0c;以及B-Tree&#xff0c;B-Tree在文件系统&#xff0c;都是通过红黑树去实现的。虽然之前写过《再谈堆排序&#xff1a;堆…

node-webkit 开发环境搭建

node-webkit支持的操作系统类型&#xff1a; Linunx:32bit / 64bitWindows: win32Mac:32bit,10.7 开发环境 1&#xff0c;根据自己的操作系统下载响应的nw二进制文件&#xff0c;下载地址&#xff1a;https://github.com/rogerwang/node-webkit 2,建立基本开发目录&#xff0c;…

mysql sqlsugar_.net core +mysqlSugar(最为简单的增删改查)

首先建立.net Core API - empty 这个就不说了然后创建新的Controller记得添加路由[Route("api/Users")]然后在Nuget Packages安装 所需安装包这里是用mysql所以下载如下的mysqlSugarCore(切记不要忘记安装Mysql.Data)创建实例化class文件DbText.cs用于连接数据库&…

关于eclipse的indigo版中文注释时字体太小的问题(转)

eclipse目前最新版代号indigo, 在win7上使用时中文注释时字体太小的问题. 为什么会这样? 首先我们应该知道, 在win7系统中, font是有"显示"和"隐藏" 状态的. 默认情况下, eclipse使用的默认字体courier new是处于 "隐藏"下的. 这样当eclipse打开…

webdriver(python)学习笔记七——多层框架定位与智能等待

多层框架或窗口定位&#xff1a; switch_to_frame()switch_to_window()智能等待&#xff1a; implicitly_wait()现在web应用中经常会遇到框架如&#xff08;frame&#xff09;或窗口&#xff08;windows&#xff09;的应用&#xff0c;这样定位就比较难&#xff0c;有时定位一个…

bbp代码python_如何正确计算加密债券价格的BBP(Bollinger波段百分比)?

我试图用这个代码计算python中的BBP(Bollinger频带百分比)。然而&#xff0c;我的^{cd1>}函数返回^{{cd2>}或^{cd3>}用于^{cd4>}。当我使用一些硬币收盘价时&#xff0c;令人困惑的是&#xff0c;这个函数返回正确的^{cd4>}数字(而不是inf)。这是我的python代码…

ASP.NET学习路线图

转自&#xff1a;http://www.cnblogs.com/huangmeimujin/archive/2011/08/08/2131242.html 如果你已经有较多的面向对象开发经验&#xff0c;跳过以下这两步&#xff1a; 第一步 掌握一门.NET面向对象语言&#xff0c;C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的…

centos 多个mysql数据库_CentOS6.5 一台服务器同时安装多个Mysql数据库

建用户与组groupadd mysqluseradd -g mysql mysql下载源码&#xff1a;wget https://downloads.mariadb.org/interstitial/mariadb-10.1.10/source/mariadb-10.1.10.tar.gztar -xvf mariadb-10.1.10.tar.gz1、编译&#xff1a;cmake . -DCMAKE_INSTALL_PREFIX/var/lib/mysql33…