【GO之初体验】GO中面向对象的特点

作为一门没有对象的OOP,如果有OOP的经验的话,GO上手应该是很快的。今天刚好在学习GO,说说我踩的坑吧


————————————————————————
Example:

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的方法集为空


资料:
Go语言与面向对象编程
Go语言interface详解
go是面向对象语言吗?

你可能感兴趣的:(GO)