golang之抽象类实现

毋庸置疑,golang是一门相当好的语言,稍微用得不太顺手的地方就是没有语法层面的抽象类支持。但这也不是完全没有解决办法,利用接口和组合继承,可以实现抽象类。
Java中一段抽象类代码如下:

public abstract class People {
	public String name;
	public int age;

	abstract void run();
} 

class User {
	public void usePeople(People p) {
		System.out.println(p.name);
		System.out.println(p.age);
		p.name = "Alice";
		p.age += 1;
		p.run();
	}
}

由于golang中的结构体不支持抽象方法,而接口不能有字段,因此可以用如下方法实现抽象类:

type IPeople interface {
	GetName() string
	SetName(string)
	GetAge() int
	SetAge(int)
	Run()
}

type AbstractPeople struct {
	IPeople 
	name string
	age int
}

func (a AbstractPeople) GetName() string {
	return a.name
}

func (a *AbstractPeople) SetName(newName string) {
	a.name = newName
}

func (a AbstractPeople) GetAge() int {
	return a.age
}

func (a *AbstractPeople) SetAge(newAge int) {
	a.age = newAge
}

// user.
func UsePeople(p IPeople) {
	fmt.Println(p.GetName())
	fmt.Println(p.GetAge())
	p.SetName("Alice")
	p.SetAge(p.GetAge() + 1)
	p.Run()
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值