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

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

ただいまの
回答率

90.51%

  • Kotlin

    606questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

メソッドのオーバーライド

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 545

kasaburanka

score 138

お世話になります
今、kotlinの勉強をしております
try kotlinでコンパイルをしてコンソールに表示して確認しながら学習しております
下記の記述の仕方がわからないのでご指導ください

fun main(args: Array<String>) {

    val car = Ferrari("赤")
    car.drive(5.0)
    car.drive(10.0)
}

open class Car(val color : String) {
    var distance = 0.0 
    open fun drive(d: Double) {
        distance = distance + d
        println("${color}の車が ${d}km 走りました。")
        println("その結果、マイレージは ${distance}キロになりました")
    }
}

class Ferrari (color: String) : Car(color) {
    override fun drive() {
        distance = distance + d
        println("${color}のフェラリーが走っています!ブウォオオオーン!")
        println("おおっ、かっこいい!!!")
        println("マイレージは ${distance}キロになったぜい!")        
    }
}


エラー内容
Error:(17, 4) 'drive' overrides nothing オーバーライドするものがない
Error:(18, 30) Unresolved reference: d 設定ミス⁇
書き方そのものがよく理解できていません(open class出ないと継承ができないのでこのようにしました
![イメージ説明](a41c0c30902bb9b5491f904d77b70280.jpeg)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

drive(d: Double)drive()は別物です。
継承の前に、もっと基本的なことを勉強すべきでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/09 12:41

    すみません。書籍で勉強していますが記述のつながりがよく理解できていません。“基本的なことを勉強すべきでは?”その通りだと思いますがやっていることに自信が持てなくてお聞きしました。だったら辞めればいいといわれそうですが・・・・

    キャンセル

  • 2018/08/09 12:53 編集

    スーパークラスで定義されているのは drive(d: Double) なのですから、オーバーライドしたいなら、サブクラスでも drive(d: Double) と書かなければいけません。
    スーパークラスに drive() が存在しないので 'drive' overrides nothing というエラーが出ています。

    さらに、drive() だと引数に d が無く、dという変数が定義されていないのに distance = distance + d で d を参照しているので Unresolved reference: d というエラーが出ています。

    キャンセル

  • 2018/08/09 13:48

    順序追ってみていかなければいけないですね。ベースがあってそれをカスタマイズするということですね。
    書籍に書かれている内容です。
    ![![イメージ説明](4728670877b3f70d2f522f55a899694f.jpeg)](a41c0c30902bb9b5491f904d77b70280.jpeg)

    キャンセル

  • 2018/08/09 14:23

    理解できました。ありがとうございました。
    override fun drive(d: Double)の記載が間違っていました。d: Doubleが記述されていませんでした。修正できました

    キャンセル

同じタグがついた質問を見る

  • Kotlin

    606questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。