1.面向对象:
// 1.定义一个类
type Person struct {
name string // 属性
age int
}
// 行为
func (p Person)say() {
fmt.Println(p.name, p.age)
}
func (p Person)eat() {
fmt.Println(p.name, "正在吃饭")
}
func main() {
// 根据定义好的类创建一个对象
per := Person{"lnj", 33}
per.say()
per.eat()
}复制代码
总结:
1.什么是面向过程?
强调的是功能行为
关注的是解决问题需要哪些步骤
所有事情都需要亲力亲为
2.什么是面向对象?
强调具备了功能的对象
关注的是解决问题需要哪些对象
所有事情都可以交给具备了功能的对象完成, 不用亲力亲为
3.在编程开发中如何创建一个对象?
3.1定义一个类
3.2通过定义的类创建对象
现实生活中要创建一个对象, 必须现有一个模型
例如: 生产汽车, 必须有图纸, 然后再根据图纸生产出具体的汽车
现实生活中的图纸, 就是用于描述汽车有哪些属性和行为
在编程中, 要想创建对象, 必须先有类
编程中的类和现实生活中的图纸一样, 也是用于描述将来创建出来的对象有哪些属性和行为
4.如何定义一个类
在类中说明有哪些属性和行为, 在Go语言中可以通过结构体来说明有哪些属性和行为
结构体的属性 就是用于说明 属性的
结构体的方法 就是用于说明 行为的复制代码
2.封装性:
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
}复制代码
func main() {
// 2.通过类创建对象
p := demo.Person{}
//p.name = "lnj"
// 当一个类把自己的成员变量暴露给外部的时候,那么该类就失去对该成员变量的管理权,别人可以任意的修改你的成员变量
//p.age = -1
// 封装之后: 提供了数据的安全性, 将变化隔离到了自己当中, 外界不用关心内部的处理, 只需要拿到方法使用即可
// 封装的原则: 将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共的方法对其访问
p.SetName("lnj")
p.SetAge(-1)
fmt.Println(p.GetName())
fmt.Println(p.GetAge())
}复制代码
3.继承性:
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()
}复制代码
4.多态性:
// 1.定义一个接口
type Animal interface {
eat()
}
type Dog struct {
name string
}
func (d Dog)eat() {
fmt.Println(d.name, "吃东西")
}
// 3.定义一个猫的结构体
type Cat struct {
name string
}
func (c Cat)eat() {
fmt.Println(c.name, "吃东西")
}
func main() {
/*
1.什么是多态?
多态就是某一类事物的多种形态
2.在Go语言中通过接口来实现多态
*/
1.666的int形态
//var num int = 666
2.66的接口形态
//var value interface{} = 666
1.旺财狗的形态
//var d Dog = Dog{"旺财"}
//d.eat()
2.旺财动物的形态
//var a1 Animal = Dog{"旺财"}
//a1.eat()
//
1.外星人猫的形态
//var c Cat = Cat{"外星人"}
//c.eat()
2.外星人动物的形态
//var a2 Cat = Cat{"外星人"}
//a2.eat()
var d Dog = Dog{"旺财"}
var c Cat = Cat{"外星人"}
eat(d)
eat(c)
}
func eat(a Animal) {
a.eat()
}复制代码
代码https://github.com/codeXiaoQiang/Go-language