本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

面向对象三大特性

一、封装

封装主要是通过访问权限控制实现的。

java中有public,private等可以控制访问权限

go中的访问权限控制:

通过约定来实现权限控制(首字母的大小写)

二、继承

go是没有继承的,但是可以通过结构体实现继承的效果

// Person 有三个属性,两个方法 type Person struct { IdCard string Age int Name string } func (p *Person) Eat() { fmt.Println("我会吃") } func (p *Person) Run() { fmt.Println("我会跑") } // student在person的基础上多了两个属性,一个方法 type Student struct { Person ClassName int StudentNum int } func (s *Student) Exam() { fmt.Println("我会考试") } func main() { //student := Student{ClassName:3,StudentNum:11231,Person:Person{IdCard:"111"}} student := Student{} student.IdCard = "111xx" student.Name = "张三" student.Age = 18 student.ClassName = 3 student.StudentNum = 113123 student.Eat() student.Exam() fmt.Println(student.Name) fmt.Println(student.IdCard ) } // 重写 func (s *Student)Eat() { fmt.Println("我是学生,我可以在食堂吃") }

三、多态(polymorphic)

有多种形态,某个struct实现了某个interface中的所有方法

type Animal interface { Say() } type Cat struct { Name string Age int } func (c * Cat) Say() { fmt.Printf("%s,%d岁了,%s\n",c.Name,c.Age,"喵喵的叫") } type Dog struct { Name string Age int } func (d *Dog)Say() { fmt.Printf("%s,%d岁了,%s\n",d.Name,d.Age,"汪汪的叫") } func AnimalSay(a Animal) { a.Say() } func main() { cat := Cat{Name:"小花",Age:1} dog := Dog{Name:"小奶狗",Age:2} AnimalSay(&cat) AnimalSay(&dog) }

1484人已阅读,今天你学习了吗?

添加新回复