GO言語でのカプセル化、継承、およびマルチステート
パッヶージ
goのパッケージはjavaとは異なり、goの中にはjavaの中のclassはありませんが、structをクラスと見なすことができ、パッケージは簡単にstructのパッケージと見なすことができます.以下のようにします.
継承
structをクラスと見なし、structには他のstructを含め、内部structを継承する方法と変数を含むことができ、同時に書き換えることができ、コードは以下の通りである.
マルチステート
goの複数台はjavaのよりずっと隠れており,厳密には多態ではないが,インタフェースを用いて行うことができ,いずれも同じインタフェースを実現した2つのオブジェクトに対して類似したアップシフトを行うことができ,このとき方法を多態ルーティングして配布することができ,完全コードは以下の通りである.
goのパッケージはjavaとは異なり、goの中にはjavaの中のclassはありませんが、structをクラスと見なすことができ、パッケージは簡単にstructのパッケージと見なすことができます.以下のようにします.
type obj1 struct {
valte1 string
}
type obj2 struct {
valte2 string
}
継承
structをクラスと見なし、structには他のstructを含め、内部structを継承する方法と変数を含むことができ、同時に書き換えることができ、コードは以下の通りである.
package main
import "fmt"
type oo struct {
inner
ss1 string
ss2 int
ss3 bool
}
type inner struct {
ss4 string
}
func (i *inner) testMethod(){
fmt.Println("testMethod is called!!!")
}
func main() {
oo1 := new(oo)
fmt.Println("ss4 :"+oo1.ss4)
oo1.ss4 = "abc"
fmt.Println("ss4 "+oo1.ss4)
oo1.testMethod()//
oo1.inner.testMethod()//
}
マルチステート
goの複数台はjavaのよりずっと隠れており,厳密には多態ではないが,インタフェースを用いて行うことができ,いずれも同じインタフェースを実現した2つのオブジェクトに対して類似したアップシフトを行うことができ,このとき方法を多態ルーティングして配布することができ,完全コードは以下の通りである.
package main
import "fmt"
type interfacetest interface {
//testMothod1() string
//testMothod()// go
iMethod() // int go , java
}
type obj1 struct {
valte1 string
}
type obj2 struct {
valte2 string
}
// testMothod
func ( obj11 *obj1)iMethod(){
fmt.Println("testMothod go obj1")
}
// testMothod
func ( obj11 *obj2)iMethod() {
fmt.Println("testMothod go obj2")
}
func gorun(ii interfacetest){
fmt.Println(ii.iMethod)
}
func main(){
var i interfacetest
//interfacetest_ := new(interfacetest)// GO var i interfacetest
obj1_ := new(obj1)
// obj1
i = obj1_
i.iMethod()//
gorun(i)
gorun(obj1_)
//interfacetest_.testMethod() // java , go
// obj2
obj2_ := new(obj2)
i = obj2_
i.iMethod()//
gorun(i)
gorun(obj2_)
list := [2]interfacetest{obj1_,obj2_}
slice := []interfacetest{}
slice = append(slice, obj1_)
slice = append(slice, obj2_)
for index,value := range slice {
fmt.Println(index)
fmt.Println(value)
}
fmt.Println(len(slice))
fmt.Println(len(list))
}