类和子类的一些例子

本文介绍了Swift语言中类的基本定义、属性与方法,并通过具体示例展示了如何使用继承来扩展类的功能。同时,文章还解释了如何实现构造器、重写父类方法等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//关于类的示例

class Shape{//首字母大写
    var numberOfSides = 0
    
func simpleDescription() -> String{
        
return"A shape with \(numberOfSides) sides."
    }
}

var shape = Shape()//注意编译器要求一定的编程规范
shape.numberOfSides = 7
var sharpeDescription = shape.simpleDescription()

class NamedShape {
    
var numberOfSides: Int = 0
    
var name: String
    
init(name: String){//构造器,用于初始化,deinit析构函数用来在清理中执行一些操作
        self.name = name
    }
    
    
func simpleeDescription() -> String{
        
return "A shape wit \(name) sides."
    }
}
var nameShape = NamedShape( name: "Zhangwei")
nameShape.numberOfSides = 7
nameShape.simpleeDescription()

//子类
class Square: NamedShape{//:后为父类名
    var sideLength: Double
    
init(sideLength:Double, name: String) {
        
self.sideLength = sideLength
        
super.init(name: name)
        
numberOfSides = 4
    }
    
func area() -> Double{
        
return sideLength * sideLength
    }
    
override func simpleeDescription() -> String {//重写父类方法的话需要override 标记
        return "A square with sides of \(sideLength)"
    }
    
}
let test = Square(sideLength: 5.2, name: "ZhiMing")
test.area()
test.simpleeDescription()
class EquilateralTriangle: NamedShape{
    
var sideLength:Double
    
init(sideLength:Double,name: String) {
        
self.sideLength = sideLength
        
super.init(name: name)
        
numberOfSides = 3
    }
    
var perimeter:Double{
        
get{
            
return 3.0 * sideLength
        }
        
set{
            
sideLength = newValue / 3.0//newVale为新值,如果需要在设置一个新值运行一些代码可以用willSetdidSet
        }
    }
    
override func simpleeDescription() -> String {
        
return "An equ length\(sideLength)"
    }
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength

class TriangleAndSquare {//willSet的示例,不过我并没有完全明白
    var triangle:EquilateralTriangle{
        
willSet{
            
square.sideLength = newValue.sideLength
        }
        
    }
    
var square:Square{
        
willSet{
            
triangle.sideLength = newValue.sideLength
        }
    }
    
init(size: Double,name: String){
        
square = Square(sideLength: size, name: name)
        
triangle = EquilateralTriangle(sideLength: size, name: name)
    }
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
triangleAndSquare.square = Square(sideLength: 50, name: "larger Square")
triangleAndSquare.triangle.sideLength

let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值