# Go学习-Day6

文章目录

  • Go学习-Day6
    • 封装
    • 继承
    • 接口

Go学习-Day6

  • 个人博客:CSDN博客

封装

  • 类似java的类的封装,这里我们利用大小写和工厂模式来实现封装的功能
  • 略过

继承

  • 相似的类具有相似的方法,反复绑定相同的方法,代码冗余,所以引入了继承的概念

  • 嵌套匿名结构体来实现继承的效果

  • 动手实践!

  • type Node struct {
    	Name     string `json:"name"`
    	Password string `json:"password"`
    }
    
    type Point struct {
    	Node
    	X int
    	Y int
    }
    
    func (a *Node) ok() {
    	a.Name = "bbbb"
    }
    func main() {
    
    	var a Point = Point{
    		Node{"aaa", "bbb"},
    		1,
    		2,
    	}
    
    	a.ok()
    
    	fmt.Println(a)
    }
    
  • 注意看,a.ok()其实是a.Node.ok()底层自动识别,可以省略匿名结构体

  • 基本数据类型可以匿名,但是不能出现多个相同类型的匿名基本类型

接口

  • 多态主要就是由接口来实现的

  • 声明

  • type inter interface {
    	a()
    	b()
    }
    
  • 实现接口

  • import "fmt"
    
    type inter interface {
    	a()
    	b()
    }
    type obj1 struct {
    }
    
    type union struct {
    }
    
    func (o obj1) a() {
    	fmt.Println("okkk")
    	//用node对象给接口的a()实现
    }
    
    func (o obj1) b() {
    	fmt.Println("ohhh")
    }
    
    func (u union) ok(in inter) {
    	in.a()
    	in.b()
    }
    
    func main() {
    
    	x := union{}
    	y := obj1{}
    	x.ok(y)
    }
    
    
  • 从上面我们可以看到,在声明一个接口之后,我们用工厂方法法obj对应接口的所有方法给实现了,然后另外整一个抽象类似的的结构体,绑定一个方法运行接口,这样我们就能通过接口把这两个类给链接在一起。

  • 总结。

  • interface类型可以定义一组方法,方法不用实现,并且不能含有变量

  • Go语言没有implements关键字,只要一个变量类型,绑定了接口中所有的方法,这个变量就能实现这个接口

  • 这个变量就能导入到含有接口作为变量的函数内

你可能感兴趣的:(Go,golang,学习,开发语言)