指针与结构体
文章目录
- 指针与结构体
- 一、OOP 思想
- 二、继承
- 三、方法
一、OOP 思想
Go语言不是面向对象的语言,这里只是通过一些方法来模拟面向对象,从而更好的来理解面向对象思想
- 面向过程的思维模式
- 1.面向过程的思维模式是
简单的线性思维
,思考问题首先陷入第一步做什么、第二步做什么的细节中,这种思维模式适合处埋简单的事情。 - 2.面向对象的思维模式说白了就是
分类思维模式
。首先思考解决问题,需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
- 1.面向过程的思维模式是
- 面向对象的三大特点:封装、继承、多态
二、继承
继承就是子类继承父类的特征和行为,使得子类具有父类的属性和方法,使得子类具有父类相同的行为。子类会具有父类的一般特性也会具有自身的特性。
Go 使用结构体嵌套实现继承
package main
import "fmt"
// 1、定义一个父“类”结构体
type Person struct {
name string
age int
}
// 2、定义一个子“类”结构体
type Student struct {
Person // 匿名变量、继承
school string // 子类自己的属性字段
}
func main() {
g1 := Person{name: "guan", age: 18}
fmt.Println(g1.name)
g2 := Student{Person{name: "guan0001", age: 22}, school: "NNU"}
fmt.Println(g2.Person.name)
fmt.Println(g2.name)
// 提升字段
// 对于Student来说,Person是匿名字段,Person中的属性 name、age就叫做提升字段
// 提升字段可以通过名字直接访问不需要通过结构体名Person
var g3 Student
g3.name = "guan003"
g3.school = "NNU"
fmt.Println(g3)
}
三、方法
什么事方法
Go 语言中同时拥有函数和方法。
-
方法:
- 某个类别的行为功能,需要制定的接受者调用
- 一段独立的功能代码,可以直接调用
-
函数
- 一段独立功能的代码,可以直接调用
- 命名不能冲突
package main
import "fmt"
type Dog struct {
name string
age int
}
type Cat struct {
name string
age int
}
// 方法定义
func (dog Dog) eat() {
fmt.Println("Dog,eating")
}
func (dog Dog) sleep() {
fmt.Println("Dog,sleeping")
}
func (cat Cat) eat() {
fmt.Println("Cat,eating")
}
func main() {
dog := Dog{name: "wangwangDog", age: 1}
dog.eat()
dog.sleep()
cat := Cat{name: "miaomiaoCat", age: 2}
cat.eat()
}