面向对象编程三大特点:封装、继承、多态。
1. 构造函数
Go不支持构造器。如果某类型的零值不可用,需要提供NewT(parameters)函数,用来初始化T类型的变量。按照Go的惯例,应该把创建T类型变量的函数命名为NewT(parameters),若一个包中只含有一种类型,则函数名为New(parameters)。
包含NewT()函数的包的结构体应该首字母小写,以使结构体对外不可引用,只能通过NewT()创建结构体。相应的,结构体内所有字段也应该小写,被隐藏,方法要根据实际情况确认。
// oop/employee/employee.go package employee import "fmt" type employee struct { firstName string lastName string totalLeaves int leavesTaken int } func New(firstName string, lastName string, totalLeaves int, leavesTaken int) employee{ e := employee{firstName, lastName, totalLeaves, leavesTaken} return e } func (e employee) LeavesRemaining(){ fmt.Printf("%s %s has %d leaves remaining", e.firstName, e.lastName, e.totalLeaves-e.leavesTaken) } //oop/main.go package main import "oop/employee" func main(){ /* e := employee.Employee{ FirstName: "wang", LastName: "qing", TotalLeaves: 30, LeavesTaken: 20, } */ e := employee.New("wang", "qing", 30, 20) e.LeavesRemaining() }
2. 继承
Go不支持继承,但他支持组合(composition)。组合的一般含义定义为“合并在一起”。
一般通过嵌套结构体进行组合。
3. 多态
Go通过接口来实现多态。在Go中,一个类型如果定义了接口所声明的全部方法,那该类型就实现了该接口。
所有实现了接口的类型,都可以把它的值保存在一个接口类型的变量中。在 Go 中,我们使用接口的这种特性来实现多态。
参考: