首页 > 其他分享 >无涯教程-Swift - 继承

无涯教程-Swift - 继承

时间:2024-01-29 15:32:04浏览次数:27  
标签:教程 area 无涯 var radius print Swift class 属性

通常,一个类可以从另一个类继承方法,属性和函数。类可以进一步分类为子类和父类。

  • 子类    -  当一个类从另一个类继承属性,方法和函数时,称为子类

  • 父类    -  包含从其自身继承其他类的属性,方法和函数的类称为超类

Swift 4类包含调用和访问方法,属性,函数和覆盖方法的父类,此外,属性观察器还用于添加属性并修改存储或计算的属性方法。

基类

不继承另一个类的方法,属性或函数的类称为“Base Class”。

class StudDetails {
   var stname: String!
   var mark1: Int!
   var mark2: Int!
   var mark3: Int!
   
   init(stname: String, mark1: Int, mark2: Int, mark3: Int) {
      self.stname=stname
      self.mark1=mark1
      self.mark2=mark2
      self.mark3=mark3
   }
}

let stname="Swift 4"
let mark1=98
let mark2=89
let mark3=76

print(stname)
print(mark1)
print(mark2)
print(mark3)

运行上述程序时,我们得到以下输出-

Swift 4
98
89
76

此处将具有类名StudDetails的类定义为基类,该基类用于包含学生名称以及三个科目标签为mark1,mark2和mark3。 " let"关键字用于初始化基类的值,并借助"print"函数显示基类的值。

子类

将新类基于现有类的行为被定义为“subclass”。子类继承其基类的属性,方法和函数,要在基类名称之前使用子类“:”

class StudDetails {
   var mark1: Int;
   var mark2: Int;
   
   init(stm1:Int, results stm2:Int) {
      mark1=stm1;
      mark2=stm2;
   }
   func print() {
      print("Mark1:\(mark1), Mark2:\(mark2)")
   }
}

class display : StudDetails {
   init() {
      super.init(stm1: 93, results: 89)
   }
}

let marksobtained=display()
marksobtained.print()

运行上述程序时,我们得到以下输出-

Mark1:93, Mark2:89

" StudDetails"类定义为超类,其中声明了学生标签,子类" display"用于从其超类继承标签,子类定义学生标签并调用print()方法以显示学生标签。

覆盖

 'override'关键字用于覆盖超类中声明的方法。

超类,属性和下标

" super"关键字用作访问超类中声明的方法,属性和下标的前缀

Overriding 访问 methods,properties and subscripts
Methods super.somemethod()
Properties super.someProperty()
Subscripts super[someIndex]

方法覆盖

可以通过子类中定义的方法的'override'关键字来覆盖继承的和类型方法,在这里,print()在子类中被重写,以访问超类print()中提到的type属性。 cricket()超类的新也被创建为" cricinstance"。

class cricket {
   func print() {
      print("Welcome to Swift 4 Super Class")
   }
}

class tennis: cricket {
   override func print() {
      print("Welcome to Swift 4 Sub Class")
   }
}

let cricinstance=cricket()
cricinstance.print()

let tennisinstance=tennis()
tennisinstance.print()

运行上述程序时,我们得到以下输出-

Welcome to Swift Super Class
Welcome to Swift Sub Class

属性覆盖

您可以覆盖继承的或类属性,以为该属性提供自己的自定义getter和setter。

覆盖Getters 和 Setters 属性

Swift 4允许用户提供自定义的getter和setter来覆盖继承的属性,无论它是存储属性还是计算属性。子类不知道继承的属性名称和类型。因此,用户需要在子类中指定在超类中指定的覆盖属性的名称和类型是至关重要的。

class Circle {
   var radius=12.5
   var area: String {
      return "of rectangle for\(radius) "
   }
}

class Rectangle: Circle {
   var print=7
   override var area: String {
      return super.area + " is now overridden as\(print)"
   }
}

let rect=Rectangle()
rect.radius=25.0
rect.print=3
print("Radius\(rect.area)")

运行上述程序时,我们得到以下输出-

Radius of rectangle for 25.0  is now overridden as 3

覆盖观察者属性

当需要为继承的属性添加新属性时,在Swift 4中会引入"property overriding"概念。

class Circle {
   var radius=12.5
   var area: String {
     return "of rectangle for\(radius) "
   }
}

class Rectangle: Circle {
   var print=7
   override var area: String {
      return super.area + " is now overridden as\(print)"
   }
}

let rect=Rectangle()
rect.radius=25.0
rect.print=3
print("Radius\(rect.area)")

class Square: Rectangle {
   override var radius: Double {
      didSet {
         print=Int(radius/5.0)+1
      }
   }
}

let sq=Square()
sq.radius=100.0
print("Radius\(sq.area)")

运行上述程序时,我们得到以下输出-

Radius of rectangle for 25.0  is now overridden as 3
Radius of rectangle for 100.0  is now overridden as 21

Final防止覆盖

当用户不需要其他人访问超类方法,属性或下标时,Swift 4会引入"final"属性来防止覆盖。声明"final"属性后,下标将不允许超类方法,属性及其下标被覆盖。声明" final"属性后,将限制用户创建其他子类。

final class Circle {
   final var radius=12.5
   var area: String {
      return "of rectangle for\(radius) "
   }
}

class Rectangle: Circle {
   var print=7
   override var area: String {
      return super.area + " is now overridden as\(print)"
   }
}

let rect=Rectangle()
rect.radius=25.0
rect.print=3
print("Radius\(rect.area)")

class Square: Rectangle {
   override var radius: Double {
      didSet {
         print=Int(radius/5.0)+1
      }
   }
}

let sq=Square()
sq.radius=100.0
print("Radius\(sq.area)")

运行上述程序时,我们得到以下输出-

<stdin>:14:18: error: var overrides a 'final' var
override var area: String {
^
<stdin>:7:9: note: overridden declaration is here
var area: String {
^
<stdin>:12:11: error: inheritance from a final class 'Circle'
class Rectangle: Circle {
^
<stdin>:25:14: error: var overrides a 'final' var
override var radius: Double {
^
<stdin>:6:14: note: overridden declaration is here
final var radius=12.5

由于超类被声明为"final",并且其数据类型也被声明为"final",因此该程序将不允许进一步创建子类,并且会引发错误。

参考链接

https://www.learnfk.com/swift/swift-inheritance.html

标签:教程,area,无涯,var,radius,print,Swift,class,属性
From: https://blog.51cto.com/u_14033984/9465927

相关文章

  • 无涯教程-Swift - Subscripts(下标)
    Subscripts下标可以访问类,结构和枚举中的集合,序列和列表的元素成员。这些下标用于在索引的帮助下存储和检索值。在someArray[index]的帮助下访问数组元素,而在Dictionary中的后续成员元素可以作为someDicitonary[key]访问。下标声明语法 "subscript"关键字用于定义,用户可以......
  • 【教程】iOS 手机抓包工具介绍及教程
    ......
  • 无涯教程-Swift - Method(方法)
    在Swift4语言中,与特定类型关联的函数称为"方法"。在ObjectiveC中,类用于定义方法,而Swift4语言为用户提供了具有类,结构和枚举方法的灵活性。实例方法在Swift4语言中,可通过方法访问Class,Structures和Enumeration。方法可以写在{}花括号内,它具有对类型的方法和属性的隐式访问,......
  • 无涯教程-Swift - Properties(属性)
    Swift4语言为类,枚举或结构提供属性以关联值。存储属性Swift4引入了存储属性的概念来存储常量和变量的,常量的存储属性由'let'关键字定义,变量的存储属性由'var'关键字定义。在定义期间,存储的属性提供"默认值"初始化期间,用户可以初始化和修改初始值structNumber{var......
  • 无涯教程-Swift - Struc(结构)
    Swift4提供了一个灵活的构建块,可以将结构struct用作结构,通过使用这些结构,可以一次定义构造方法和属性。结构语法Structuresaredefinedwitha'Struct'Keyword.structnameStruct{Definition1Definition2---DefinitionN}结构定义如假设我们必须访......
  • Spring WebSocket实现实时通信的详细教程
    简介WebSocket是基于TCP/IP协议,独立于HTTP协议的通信协议。WebSocket连接允许客户端和服务器之间的全双工通信,以便任何一方都可以通过已建立的连接将数据推送到另一方。我们常用的HTTP是客户端通过「请求-响应」的方式与服务器建立通信的,必须是客户端主动触发的行为,服务端只是......
  • 【完整版教程】查看APP崩溃日志
    摘要本文介绍了在Android和iOS双端设备上查看APP崩溃日志的方法,包括使用adb命令获取Android崩溃日志以及通过克魔助手工具查看iOS设备的崩溃日志。同时提供了操作步骤和相关代码案例演示。引言在移动应用开发过程中,经常需要查看APP的崩溃日志以便进行调试和分析。针对Android和......
  • tmux使用教程:终端神器tmux:多任务管理大师
    文字版教程:阮一峰Tmux使用教程视频教程:终端神器tmux:多任务管理大师......
  • 无涯教程-Swift - 集合(Sets)
    Swift4Sets用于存储相同类型的不同值,但它们没有数组的确定顺序,如果要确保没有重复的值,则可以使用Set集合而不是数组。创建Set集您可以使用以下初始化语法创建一个特定类型的空集-varsomeSet=Set<Character>()//字符可以替换为set的数据类型。访问和修改您可以使用......
  • 无涯教程-Swift - 数组
    Swift4数组用于存储相同类型的值的有序列表。如果将创建的数组分配给变量,则它始终是可变的,这意味着您可以通过添加,删除或更改其元素来对其进行更改;但是,如果将数组分配给常量,则该数组是不可变的,并且其大小和内容无法更改。创建数组您可以使用以下初始化器语法创建某种类型的空......