go-面相对象使用

本文介绍了Go语言中的packagebaseDemo示例,详细探讨了接口的使用、对象的多种创建方式、方法表达式、接口调用的多态性以及结构体之间的转换。
摘要由CSDN通过智能技术生成
package baseDemo

import (
	"demo/baseDemo/utils"
	"fmt"
	"testing"
)

// 函数/方法的入参可以是一个接口(用来实现多态)
func funDemo(pointInterface1 utils.PointInterface) {
	pointInterface1.AddX()
}

func TestStruct(t *testing.T) {
	var point1 utils.Point //对象创建方式1
	point1.X = 1
	point1.Y = 1

	point2 := utils.Point{}           //对象创建方式2
	point6 := utils.Point{X: 1, Y: 2} // 对象创建方式4
	point5 := &utils.Point{1, 2}      //对象创建方式3-1 可以简化为 3-2(由编译器进行转换)
	point3 := utils.Point{1, 2}       //对象创建方式3-2 顺序赋值
	point4 := new(utils.Point)        //指向结构体的指针(类型:*Point)//对象创建方式4
	(*point4).X = 1                   //*:根据地址取出结构体,并进行赋值
	point4.Y = 1                      //编译器进行了转换,转成了(*point4).y = 1

	pointVO1 := utils.PointVO(point1) //不同结构体直接的转换
	fmt.Println(point1, point2, point3, point4, point5, point6, pointVO1)
}

// 方法表达式
func Test1(t *testing.T) {

	fun1 := utils.Point.InitPoint1
	point1, point2, point3 := utils.Point{}, utils.Point{}, utils.Point{}
	point1 = fun1(point1)

	fun2 := (*utils.Point).InitPoint1
	point2 = fun2(&point2)

	(&point3).InitPoint2() //引用传递
	point3.InitPoint2()    //可以简化,由编译器转换(只有类的方法才可以, 函数不会简化)
	fmt.Println(point1, point2, point3)
}

func TestInterface(t *testing.T) {

	//通过接口调用方法(用来实现多态,接口接收不同的类,执行类中多态的方法)
	point1 := utils.NewPoint(1, 1)
	var point2 utils.PointInterface = point1
	point2.AddY()
	fmt.Println(point2)

	//接口数组,可以存放不同的类,但是实现了接口
	pointInterfaceArr := []utils.PointInterface{}
	pointInterfaceArr[0] = point2

	//用空接口接收任意类型的参数
	var empty utils.EmptyInterface = &point1
	fmt.Println(empty)
}

func main() {
	p := utils.NewPoint(1, 1)
	p.SetX(10)
	p.GetX()
	fmt.Println(p)

	point3D := utils.Point3D{}
	point3D.Z = 1
	point3D.Point.X = 1
	point3D.X = 1 // 就近原则,但前类找不到属性/方法 会往父类上找 等于 point3D.Point.x = 1
	point3D.Point.InitPoint2()
	point3D.InitPoint2()

	point3D1 := utils.Point3D{utils.Point{1, 1}, 1}
	fmt.Println(point3D1)
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,一切皆对象,包括数字、字符串、列表等基本数据类型。\[1\]为了定义一个类,可以使用class关键字,如果没有父类,建议统一继承自object类。例如:class 类名(object): pass。\[2\]面向对象编程的三大特性之一是多态,它允许不同的对象对同一个方法做出不同的响应。\[2\]在Python中,可以通过给对象直接添加属性来动态地给对象添加属性。例如,使用对象.属性名 = 属性值的方式给对象添加一个属性。但是不建议使用这种方式给对象添加属性。\[3\]在面向对象编程中,self表示调用这个方法的对象本身。通过self.属性名可以访问对象的属性,通过self.方法名()可以调用对象的方法。\[3\]通过创建类的实例,即对象,可以调用对象的方法并开辟新的内存空间。 #### 引用[.reference_title] - *1* *3* [python 中的面向对象](https://blog.csdn.net/liuxin_hello/article/details/127560700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【轻松学】Python面向对象编程——类的设计、基础语法、继承、多态、类属性和类方法、单例设计](https://blog.csdn.net/qq_43721542/article/details/102988665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值