Go语言面向对象

2018-09-28  本文已影响0人  AuglyXu

类和对象


公私有问题


面向对象-封装性

package demo

// 1.定义一个类
type Person struct {
    //Name string
    //Age int
    name string
    age int
}
// 提供了两个对外的接口
// 本质就是对外提供了两个公有的方法
func (p *Person)SetName(name string)  {
    p.name = name
}
func (p *Person)SetAge(age int)  {
    // 可以对外界的修改进行逻辑判断处理
    if age < 0 {
        age = 0
    }else if(age > 100){
        age = 100
    }
    p.age = age
}
func (p *Person)GetName() string  {
    return p.name
}
func (p *Person)GetAge() int  {
    return p.age
}
package main

import (
    "demo"
    "fmt"
)
func main()  {
    // 2.通过类创建对象
    p := demo.Person{}
    p.SetName("lnj")
    p.SetAge(-1)
    fmt.Println(p.GetName())
    fmt.Println(p.GetAge())
}

面向对象-继承

package main

import "fmt"

type Person struct {
    name string
    age int
}
func (p *Person)say()  {
    fmt.Println(p.name, p.age)
}

// Go语言中的继承就是通过匿名属性来实现的
type Student struct {
    Person // 匿名属性
    score int
}
func (stu *Student)say()  {
    fmt.Println(stu.name, stu.age, stu.score)
}

func main()  {
    stu := Student{}
    // 属性的继承
    stu.name = "zs"
    stu.age = 18
    stu.score = 66
    //fmt.Println(stu)
    // 方法的继承
    stu.say()
    stu.Person.say()
}

面向对象-多态性

package main

import "fmt"

// 1.定义一个接口
type Animal interface {
    eat(name string)
}
type Dog struct {
    name string
}

func (d Dog)eat()  {
    fmt.Println(d.name, "吃东西")
}

// 3.定义一个猫的结构体
type Cat struct {
    name string
}

func main()  {
    //// 1.旺财狗的形态
    var d Dog = Dog{"旺财"}
    d.eat()
    //2.旺财动物的形态
    var a1 Animal = Dog{"旺财"}
    a1.eat()

    var d Dog = Dog{"旺财"}
    eat(d)
}
func eat(a Animal)  {
    a.eat()
}
上一篇 下一篇

猜你喜欢

热点阅读