您好,登錄后才能下訂單哦!
// interface 接口 練習
//實現接口的原則就是
//實現了它定義的方法,就默認是實現了接口
package main
import "fmt"
//聲明一個接口
type USB interface {
//聲明方法Name, 并設置 返回值類型string
Name() string
//聲明方法Connect方法,無返回值
Connect()
}
//聲明一個類型,在Go語言中,對應的就是struct類型
type PhoneConnector struct {
//聲明一個私有屬性
name string
}
//---------------------聲明完Name,Connector方法后,就是實現了USB接口了---------------------------
//使用receiver,將類型跟方法進行綁定
func (pc PhoneConnector)Name() string{
return pc.name
}
func (pc PhoneConnector)Connector() {
fmt.Println("connected:\t", pc.name)
}
//--------------------------------------------------------------------------------------
func main() {
a := PhoneConnector{"apple"}
fmt.Println("Name:\t", a.Name())
a.Connector()
}
//interface 嵌套 練習測試
package main
import "fmt"
//定義一個空的接口
//這樣的話,所有的類,都默認實現了這個接口,因為它沒有方法
//定義的空接口,就相當于定義了一 個Object對象,最高層
//都是它的子類了,就沒有任何限制了
type nullEmpty interface {
}
// 定義一個 父接口
type HOME interface {
//這個接口里,只定義一個方法
Name() string
}
//再定義一個接口, 這相當于是子接口了
type MyHome interface {
Show() string
//這樣就嵌套了 一個接口
HOME
}
//聲明一個結構類型
type BeijingHome struct {
name string
}
//-----------開始創建方法method-----
func (info BeijingHome)Show(){
fmt.Println("Show()--->info.name:\t", info.name)
}
func (info BeijingHome)Name() string{
return info.name
}
func main() {
a := BeijingHome{"yihuyuan"}
fmt.Println("name:\t", a.Name())
a.Show()
//------下面演示一下,上面理論中說的---復制品的問題----
b := a
b.name = "lenovo" //修改后,并沒有修改a里的值
b.Show()
Disconnect(a)
Disconnect2(a)
}
//設計一個簡單的類型斷言
func Disconnect(home HOME){
if pc, ok := home.(BeijingHome); ok{
fmt.Println("Disconnected:\t", pc.name)
return
}
fmt.Println("Unknown decive.")
}
//設計一個簡單的類型斷言
//傳入的參數,是,空接口
//實際上,對于傳入的參數,就沒有限制了
func Disconnect2(home interface{}){
//對Disconnect()方法,進行改造,
//因為,傳入的參數是頂層,相當于Java里的Object,沒有任何限制
//類型,需要自己判斷
switch v := home.(type) {
case BeijingHome:
fmt.Println("Disconnected:\t", v.name)
default:
fmt.Println("Unknown decive.")
}
}
//不同接口之間的轉換,類似于Java中的向上轉型,或者向下轉型
//就是說,有兩個接口A, B
//其中,A接口里,嵌入了B
//那么A接口可以轉換成B接口,但是,B接口不能轉換成A接口,因為
//A接口里,可能包含B接口里沒有的方法
//也就是說,多的可以向少的轉換,反之不可。
package main
import "fmt"
type USB2 interface {
Name() string
Connecter
}
type Connecter interface {
Connect()
}
type PcConnecter struct {
name string
}
func (pcConnecter PcConnecter)Name() string {
return pcConnecter.name
}
func(pcConnecter PcConnecter)Connect() {
fmt.Println("Connected:\t", pcConnecter.name)
}
func main() {
pc := PcConnecter{"appleConnector"}
var a Connecter
//將USE2 類型,強制 轉換成了Connecter類型
a = Connecter(pc)
a.Connect()
//------驗證----只有當接口存儲的類型和對象都為nil時,接口才等于nil
//聲明一個空接口, 也沒有賦值,就是nil
var aa interface{}
fmt.Println( aa == nil) // aa 本身就是一個nil,啥也沒存
//變量p, 是一個指向int類型的指針
//直接初始化為nil
var p *int = nil
aa = p //aa 指向p
fmt.Println( aa == nil)
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。