package main
import
"fmt"
type human inte***ce
type student struct
func (s *student) sayhi()
type teacher struct
func (t *teacher) sayhi()
func main()
i = &s
i.sayhi()
var t teacher = teacher
i=&t
i.sayhi()
}//輸出結果
//lili 1
//bobo 2
介面作用實現多型。
package main
import
"fmt"
type human inte***ce
type student struct
func (s *student) sayhi()
type teacher struct
func (t *teacher) sayhi()
func who(i human)
func main()
who(&s)
var t teacher = teacher
who(&t)
}//輸出結果
//654321 lili 1
//123456 bobo 2
乙個函式who可以呼叫不同的兩種方法。
接下來讓我們用乙個計算機的例項來介看看介面的用處!
1)使用物件導向的思想實現乙個加減功能的計算器
package main
import
"fmt"
type opertion struct
func (o *opertion) getresult(info string, num1 float64, num2 float64) (result float64)
return
}func main()
//輸出結果
//6//3
我們定義了乙個類(結構體),然後為該類建立了乙個方法,封裝了整個計算器功能,以後要使用直接使用該類(結構體)建立物件就可以了。這就是物件導向總的封裝性。
2)用介面實現
package main
import
"fmt"
type opertion struct
type getresult inte***ce
type add struct
func (a *add) getresult() float64
type sub struct
func (s *sub) getresult () float64
type factory struct
func oper(i getresult)float64
func(f *factory)createfaction(info string,num1 float64,num2 float64)float64 }
result=oper(add)
case
"-":
sub := &sub}
result=oper(sub)
}return result
}func main()
//輸出結果
//30
//10
package main
import
"fmt"
type humaner inte***ce
type person inte***ce
type student struct
func (s *student)sayhi()
func (sa *student)sing(s string)
func main()
i=si.sayhi()
i.sing("哥哥")
}//輸出結果
//hello
//student 在唱著 哥哥
介面繼承後,可以實現「超集」介面轉換「子集」介面,**如下:
package main
import
"fmt"
type humaner inte***ce
type person inte***ce
type student struct
func (s *student) sayhi()
func (sa *student) sing(s string)
func main()
i = s
var m humaner
//i=m //err
m=sm.sayhi()
i.sing("哥哥")
}//輸出結果
//hello
//student 在唱著 哥哥
空介面(inte***ce{})不包含任何的方法,正因為如此,所有的型別都實現了空介面,因此空介面可以儲存任意型別的數值。
例如:
package main
import
"fmt"
func main() =1
fmt.println("i=",i)
i="abc"
fmt.println("i=",i)
}//輸出結果
//i= 1
//i= abc
go語言學習筆記19 物件導向
package main import fmt type interger int func a interger test b interger interger func main 輸出結果6type integer int 表示的意思是給int型別指定了乙個別名叫integer,別名可以隨便起...
go語言學習與物件導向再思考
據說smalltalk發明者alan kay就曾經說過 我發明了物件導向,而我可以告訴你c 並不是我頭腦裡所想的東西.計算機裡面只有資料和演算法,資料用於對現實世界抽象建模,演算法對資料演算,這已經很好,怎麼出來乙個物件導向這個 怪胎 物件導向教學每次都要從對現實世界的模擬講起,還記得那個會叫的鴨子...
go語言學習筆記
type info struct func main fmt.println info1 data,json.marshal info1 fmt.println string data 輸出 這裡要特別注意的是 json 冒號後面和雙引號之間千萬不要有空格!被坑慘了 go語言 import的包的前面...