最近在学习 golang,在学习和使用过程中的想法,心得会记录在这里,方便以后总结。今天这篇是关于 golang 使用组合实现的面向对象编程的特点。
golang 官网对关于 golang 是不是面向对象语言的回答是: 是, 也不是
。golang 使用组合的方式实现了面向对线的编程方式。但是这与其他语言的面向对象有些许出入。记录如下:
我们先看一段 python 编写的代码:
class A:
def b(self):
self.c()
def c(self):
print("A-----c")
class B(A):
def c(self):
print("B-----c")
if __name__ == "__main__":
b = B()
b.b()
执行结果:
PS E:\Project\Python> python .\test.py
B-----c
A 类有 b, c 两个方法, 在 b 方法中调用的 c 方法, 打印 A-----c
, B 类继承自 A 类, 并重写的 A 中的 c 方法。B 类的实例调用 b 方法时,实际调用的是 B 类中重写过的 c 方法, 因此打印的是 B-----c
再来看一段 golang 代码:
package main
import "fmt"
type A struct {
name string
}
func (a *A) S() {
a.P()
}
func (a *A) P() {
fmt.Printf("A-----P")
}
type B struct {
A
}
func (a *B) P() {
fmt.Printf("B-----P")
}
func main() {
b := &B{A: A{name: "B"}}
b.S()
}
执行结果:
PS E:\Project\Python> go run .\test.go
A-----P
可以看到, 虽然在 B 类中重写了 P 方法, 但是通过 B 类的实例调动 S 方法的时候实际调用的还是 A 类的 P 方法。
原理尚不知晓,先记录这个结果,慢慢研究,估计与 golang 使用组合实现面向对象编程有关。
Original: https://www.cnblogs.com/fishAndSea/p/16334136.html
Author: 鱼与海
Title: golang 使用记录
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/597082/
转载文章受原作者版权保护。转载请注明原作者出处!