Go语言,作为一门没有对象的OOP

package main

import "fmt"

//动物类
type Animal struct {
	Name string
	Legs int
}

//狗类
type Dog struct {
	Animal //继承Animal类
	Tail   int
}

//狗类下的方法
func (d Dog) Speak() {
	fmt.Println("汪汪汪!")
}

//猫类
type Cat struct {
	Animal //继承Animal类
	eyes   int
}

//猫类下的方法
func (c Cat) Speak() {
	fmt.Println("喵~~~")
}

//所有拥有Speak()方法的接口
type SpeakAnimal interface {
	Speak()
}

func main() {
	//实例化对象,并显示申明类中所有变量
	dog := Dog{Animal{"dahuang", 4}, 1}
	cat := Cat{Animal{"xiaohua", 4}, 2}

	var s SpeakAnimal

	s = dog
	s.Speak()

	s = cat
	s.Speak()
}

GO的结构特性:导包,类型,类型的方法,函数

1.type

  • 类的关键字由class变为了type
  • 省略了修饰符,由类名的首字母大小写决定访问权限
  • 在类结构体中包含了所有类的成员变量

2.func

func(type Type) Method(int in) int out {
return in
}

  • func(可指定为类的方法) 方法名(传入参数) 返回值
  • 在go里只有类的方法才叫方法,没有指定类的叫函数。
  • 需要特殊注意的是返回值可有多个
  • 注意方法的参数的值传递与引用传递的区别


3.继承

  • Dog类和Cat类都继承了Animal类,同时它们都具有了Animal类的属性和方法。
  • 一般情况下,子类的对象可以调父类的属性,但是如果子类和父类中有重名的属性的话,需要显式调用。(子类.父类.父类的属性)
  • 尽量不要继承!


4.interface

  • interface由方法集所构成
  • GO中interface是隐式声明的,只要包含了接口中的所有方法,就实现了此接口
  • 所以每一个type都隐式的实现了一个空interface,因为空interface的方法集为空

猜你喜欢

转载自blog.csdn.net/u010608296/article/details/85346132
今日推荐