类和子类的一些例子

// 关于类的示例

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 为新值,如果需要在设置一个新值运行一些代码可以用 willSet didSet
        }
    }
    
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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值