golang面向对象总结

golang面向对象总结

erlang_team · 2015-06-17 20:02:17 · 10037 次点击 · 预计阅读时间 2 分钟 · 大约3小时之前 开始浏览    

这是一个创建于 2015-06-17 20:02:17 的文章,其中的信息可能已经有所发展或是发生改变。

[plain] view plaincopy

  1. type $name struct{  
  2.   property01 int  
  3.   property02 int  
  4.   }  

Golang里面的方法和接口都是基于这里type *** struct创建的类型,这里其实可以理解为:

[php] view plaincopy

  1. class $name {  
  2.   public int property01;  
  3.   public int property02;  
  4.   }  

类型就是类。

所以我们说是类型的某个方法,类型实现了某个接口。

 

    类型是属性的集合,接口是方法的集合   

函数的定义:func       $funcName ( ) ( ){}

方法的定义:func  ( )  $funcName ( ) ( ){}

 

Func (成员变量 类型) funname(局部变量 类型,局部变量 类型) (返回值类型) {}

成员变量是通过type来定义的。

函数的参数列表是需要传递的局部变量。

golang的方法的类型签名:

1.指明要给哪个类型添加方法;

2.指定调用此方法的变量的是值类型还是指针类型,调用此方法的变量必须按照类型签名这里来决定是用值类型还是指针类型,golang能自动转换,但你必须确保这个变量能被正确转换为相应的值或指针。例如,一个接口类型的变量就没法被转换为一个struct的指针。

 

 

继承:

当一个类型B的某个字段(匿名字段)的类型是另一个类型 A的时候,那么类型 A所拥有的全部字段都被隐式地引入了当前定义的这个类型B。这样就实现了继承。B类型的变量就可以调用A的所有属性和方法。也就是说A继承了B。

定义继承时,子类中一般都含有一个类型是父类的匿名字段。匿名字段就是用来实现继承的。

[plain] view plaincopy

  1. package main  
  2. import (  
  3.     "fmt"  
  4. )  
  5. type Animal struct {  
  6.     Name string  
  7.     Age  int  
  8. }  
  9. func (ani *Animal) GetAge() int {  
  10.     return ani.Age  
  11. }  
  12. type Dog struct {  
  13.     Animal //Animal匿名字段  
  14. }  
  15. func main() {  
  16.     dog := Dog{Animal{"dog", 10}}  
  17.     fmt.Println(dog.Age)  
  18.     fmt.Println(dog.GetAge())  
  19. }  

 

方法的重写

如果一个类型B实现了作为其属性的类型A中的方法。那么这个类型B的值调用方法的时候调用的是自己类型B的方法,而不是属性类型A的方法。
代码如下:

[plain] view plaincopy

  1. package main  
  2. import (  
  3.     "fmt"  
  4. )  
  5. type Animal struct {  
  6.     Name string  
  7.     Age  int  
  8. }  
  9. func (ani *Animal) GetAge() int {  
  10.     return ani.Age  
  11. }  
  12. type Dog struct {  
  13.     Animal //Animal匿名字段  
  14. }  
  15. func (ani Dog) GetAge() int {  
  16.     return ani.Age + 1  
  17. }  
  18. func main() {  
  19.     dog := Dog{Animal{"dog", 10}}  
  20.     fmt.Println(dog.Age)  
  21.     fmt.Println(dog.GetAge())  
  22. }  

 

接口

1 接口

1)定义接口类型
定义接口,接口中可以有未实现的方法。

[plain] view plaincopy

  1. type Animal interface {  
  2.     GetAge() int  
  3. }  

 

1)实现接口类型
如果某个类型实现了接口的所有方法。则这个类型实现了这个接口。

 

[plain] view plaincopy

  1. type Animal interface {  
  2. GetAge() int  
  3. }  
  4. type Dog struct {  
  5. Name string  
  6. Age  int  
  7. }  


 

 

//实现GetAge()方法则实现了Animal接口 

 

[plain] view plaincopy

  1. func (ani Dog) GetAge() int {  
  2. return ani.Age  
  3. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang 是一门支持面向接口编程的语言,这意味着在 Golang 中,我们可以通过定义接口来实现多态性。具体来说,我们可以定义一个接口类型,然后让多个不同的类型实现该接口,从而使它们可以被视为同一类型,从而实现多态性。 在 Golang 中,接口是一组方法的集合,这些方法定义了该接口所代表的对象应该具有的行为。任何类型只要实现了该接口中定义的所有方法,就可以被视为该接口类型的实例。 下面是一个简单的例子,展示了如何定义一个接口和实现该接口: ```go package main import "fmt" // 定义一个接口 type Animal interface { Speak() string } // 定义一个结构体类型 type Dog struct { Name string } // 实现 Animal 接口中的 Speak 方法 func (d Dog) Speak() string { return "Woof!" } func main() { // 创建一个 Dog 类型的实例 d := Dog{Name: "Fido"} // 将该实例赋值给 Animal 类型的变量 var a Animal = d // 调用 Animal 接口中的 Speak 方法 fmt.Println(a.Speak()) // 输出: Woof! } ``` 在上面的例子中,我们定义了一个 Animal 接口,它只有一个方法:Speak。然后我们定义了一个 Dog 结构体类型,并实现了 Animal 接口中的 Speak 方法。最后,我们创建了一个 Dog 类型的实例,并将其赋值给 Animal 类型的变量。由于 Dog 类型实现了 Animal 接口中的所有方法,所以它可以被视为 Animal 类型的实例,从而实现了多态性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值