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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

312閲覧

Swift クラスのプロトコルへの準拠と継承の関係について

moriman

総合スコア615

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/02/03 02:02

protocol ProA{ var propA:Int{get} } class ClsA:ProA{ var propA:Int=800 } class ClsB:ClsA{ } func funcA(_ arg:ProA){ print(arg.propA) } var insA=ClsA() funcA(insA) var insB=ClsB() funcA(insB)

スーパークラスClsAがあるプロトコルProAに準拠しており、
ClsAのサブクラスClsBを作った時、ClsBは自動的に(下記のような
ProAへの準拠の明記をせずに)ProAへ準拠したクラスになるのでしょうか?

class ClsB:ClsA,ProA{ }

試しに以下のようにして動かしてみると、

protocol ProA{ var propA:Int{get} } class ClsA:ProA{ var propA:Int=1000 } class ClsB:ClsA,ProA{ } func funcA(_ arg:ProA){ print(arg.propA) } var insA=ClsA() funcA(insA) var insB=ClsB() funcA(insB)
error: MyPlayground.playground:20:17: error: redundant conformance of 'ClsB' to protocol 'ProA' class ClsB:ClsA,ProA{ ^ MyPlayground.playground:20:7: note: 'ClsB' inherits conformance to protocol 'ProA' from superclass here class ClsB:ClsA,ProA{

のようなエラーが出ました。やはり継承した時点でプロトコルへの準拠も継承しているようなのですが、
そういう理解で問題ないでしょうか?
あとドキュメントでこのことは明示的に説明されていますでしょうか?
ある場合場所を教えていただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

やはり継承した時点でプロトコルへの準拠も継承しているようなのですが、
そういう理解で問題ないでしょうか?

認識はそれで問題ないです。

あとドキュメントでこのことは明示的に説明されていますでしょうか?
ある場合場所を教えていただけると幸いです。

もしかしたらあるかもしれませんが、存じておりません、、

protooclとclassの継承に関しては

  • protooclは実体がないもの
  • classは実体があるもの

という差なので、親で継承していれば、子であろうと孫であろうと継承される認識でいるとすんなりはいるかと思います。

投稿2020/02/03 08:19

h_crane

総合スコア171

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

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

moriman

2020/02/03 08:25

回答をいただきましてありがとうございます。 実体がない、というのは他の言語の抽象クラスのような感じで「インスタンス化できない」ということでしょうか?
h_crane

2020/02/03 08:37

Javaでのinterfaceと言ったほうがしっくりきますでしょうか、、? インスタンス化できないから抽象クラスというのはちょっと違うような気もしますが、、 たしかにインスタンス化はできないので、その考えで良いかもしれません。
moriman

2020/02/03 09:52

わかりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問