一、继承
- LGMonkey继承LGAnimal
- LGMonkey重写了
leg
属性、和eat
方法
class LGAnimal: NSObject {
var leg:Int {return 4}
func run(){
print("\(leg)只脚奔跑")
}
func eat(){
print("肉")
}
}
class LGMonkey: LGAnimal {
override var leg: Int {return 2}
override func eat() {
print("")
}
}
二、协议
- 实现协议就必须要实现协议里面的属性,和方法
- 如果在
extension
中实现了sayHello
方法(属性同理),LGTeacher
、LGStudent
中就可以不必须实现sayHello
方法;反之如果extension
没有实现,就必须在LGTeacher
、LGStudent
中实现
- 在结构体、类和
extension
中,协议属性的实现有点不同
- 结构体:
var name: String
- 类:
var name: String = ""
- extension:
var name: String { return "dyz" }
- 父类扩展了这个协议
extension UIViewController: LGUIProtocol{ }
,子类就不能再扩展extension TableViewController: LGUIProtocol{ }
,会报错哦'TableViewController' inherits conformance to protocol 'LGUIProtocol' from superclass here
protocol LGProtocl {
/// 协议属性
var name: String {get}
/// 协议方法
func sayHello()
}
extension LGProtocl {
var name: String {
return "hello"
}
func sayHello() {
print("extension hello")
}
}
/// LGTeacher结构体来实现协议
struct LGTeacher: LGProtocl{
var name: String
// func sayHello() {
// print("你好")
// }
}
struct LGStudent: LGProtocl {
var name: String
// func sayHello() {
// print("别烦我,我要学习POP")
// }
}
class Person: LGProtocl {
var name: String = ""
func sayHello() {
print("你好")
}
}
extension UIViewController: LGProtocl {
var name: String {
return "dyz"
}
}