質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

2回答

1704閲覧

Go言語でExtendsされた親クラスで多態性を利用する方法

kappazushi

総合スコア13

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

1クリップ

投稿2018/04/30 07:13

タイトルのとおりです。子クラスでは親クラスを継承しています。ですので、Callメソッドで親クラスのフィールドやメソッドを使用したいです。ただ、エラーが発生します。interface型を使えばHelloメソッドを持っているのは対応できますが、フィールドまでは対応できません。それぞれにアクセッサ−を定義してInterfaceを新たに作って、メソッドベース対応するしかないのでしょうか?よろしくお願いいたします。

go

1package main 2 3import ( 4 "fmt" 5) 6 7type Base struct { 8 Name string 9} 10 11func (*Base) Hello(name string) { 12 fmt.Println(name) 13} 14 15type Sub struct { 16 Base // Sub extends Base 17} 18 19func Call(b *Base) { 20 b.Hello(b.Name) 21 22} 23 24func main() { 25 s := &Sub{} 26 Call(s) // prog.go:24:6: cannot use s (type *Sub) as type *Base in argument to Call 27 28}

ref https://play.golang.org/p/0hc8u-x_3Bs

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まずSub Structを以下のように変更します

Go

1type Sub struct { 2 *Base // ポインタ埋め込み 3}

そしてmain関数を以下のように

Go

1func main() { 2 b := &Base{"Nick"} 3 s := Sub{b} 4 Call(s.Base) 5}

参考: Playground

そもそもGoにはクラスやその継承はありませんので、それを考慮した言葉選びをしていただかないとわかりづらいです。

投稿2018/05/15 21:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえずやりたいことを予想してコードを直してみました。
メソッドと関数
継承と委譲
あたりの区別がついていないような……

go

1package main 2 3import ( 4 "fmt" 5) 6 7type Base struct { 8 Name string 9} 10 11func (b *Base) Hello() { 12 fmt.Println(b.Name) 13} 14 15func (b *Base) Call() { 16 b.Hello() 17} 18 19type Sub struct { 20 Base // 継承ではなく委譲 21} 22 23func main() { 24 s := &Sub{Base{"name"}} 25 s.Call() 26 27} 28

投稿2018/05/01 15:30

kokardy

総合スコア781

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問