指针与结构体



【GO 编程语言】面向对象-LMLPHP


一、OOP 思想

Go语言不是面向对象的语言,这里只是通过一些方法来模拟面向对象,从而更好的来理解面向对象思想

  • 面向过程的思维模式
    • 1.面向过程的思维模式是简单的线性思维,思考问题首先陷入第一步做什么、第二步做什么的细节中,这种思维模式适合处埋简单的事情。
    • 2.面向对象的思维模式说白了就是分类思维模式。首先思考解决问题,需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
  • 面向对象的三大特点:封装、继承、多态

二、继承

继承就是子类继承父类的特征和行为,使得子类具有父类的属性和方法,使得子类具有父类相同的行为。子类会具有父类的一般特性也会具有自身的特性。

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()

}

【GO 编程语言】面向对象-LMLPHP

10-04 14:34