Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

Classの継承を試してみます

 どうも!LSSです!!

 

 AndroidStudio+Kotlinでアプリ開発の勉強中です。

 

 Class作成シリーズ、次はいよいよ「継承」を!

と、思っていたのですが、あのシリーズに載せるにはどうすれば…みたいな悩み方をしていました^^;;;

 

「やってみないと分からない」ような事を、ちょっとでも綺麗に見栄えよく…と思い始めてしまうと、スランプに陥りますね。

 

「初心に戻る」事が必要かな、と思いつつも、そうした余裕がない現状というのもありますが、まぁ言い訳ですwww

 

という事で、今回は「Classの継承」を、シリーズ外でやってみます!!

 

 

 

今回、最終的にこんなコードを書きます

 

open class Ningen(val onamae:String,var nenrei:Int,var seibetsu:String)

class Otoko(onamae:String,nenrei:Int):Ningen(onamae,nenrei,"男")


fun main(args: Array<String>) {
    var shingo=Ningen("真吾",11,"男")
    println("${shingo.onamae}は${shingo.nenrei}歳の${shingo.seibetsu}です。")

    var kazuchan=Otoko("立倉 一志",28)
    println("${kazuchan.onamae}は${kazuchan.nenrei}歳の${kazuchan.seibetsu}です。")
}

 

実行結果は、

真吾は11歳の男です。
立倉 一志は28歳の男です。

↑こうなります。

 

 

Try Kotlin上でやってみます!

 

try.kotlinlang.org

↑ほんと、試すには手軽で素晴らしい^^

 

 

 

Class作成から

 

f:id:little_strange:20200215211632p:plain

 

 

class Ningen(val onamae:String,var nenrei:Int,var seibetsu:String)

fun main(args: Array<String>) {
    var shingo=Ningen("真吾",11,"男")
    println("${shingo.onamae}は${shingo.nenrei}歳の${shingo.seibetsu}です。")
}

 

 まず、このようなコードを書いてみました。

 

 一行目の、

class Ningen(val onamae:String,var nenrei:Int,var seibetsu:String)

が、Ningenクラスを宣言している部分。

val で「後から変更不可能な」onamae(お名前)というString(文字列)型のプロパティ、

var で「後から変更可能な」nenrei(年齢)というInt(整数)型のプロパティ、

var で「後から変更可能な」seibetsu(性別)というString(文字列)型のプロパティ、

の3つのプロパティを持つクラス(型)です。

 

 そして、main関数内で

var shingo=Ningen("真吾",11,"男")

shingoというオブジェクトを「お名前は真吾、年齢11歳、性別」として作成しています。

 

 その上で、

println("${shingo.onamae}は${shingo.nenrei}歳の${shingo.seibetsu}です。")

とする事で、shingoの各プロパティを盛り込んだ自己紹介文を出力すると、

真吾は11歳の男です。

という結果出力が出てきます。

 

…そういえば、nenreiってInt型なのにtoString()しなくても出力されちゃいましたねw

 

 

Ningenクラスを継承した、Otokoクラスを作ります!

 

open class Ningen(val onamae:String,var nenrei:Int,var seibetsu:String)

class Otoko(onamae:String,nenrei:Int):Ningen(onamae,nenrei,"男")

fun main(args: Array<String>) {
    var shingo=Ningen("真吾",11,"男")
    println("${shingo.onamae}は${shingo.nenrei}歳の${shingo.seibetsu}です。")

    var kazuchan=Otoko("立倉 一志",28)
    println("${kazuchan.onamae}は${kazuchan.nenrei}歳の${kazuchan.seibetsu}です。")
}

 

 赤文字部分を追記しました。

 これを実行すると、

真吾は11歳の男です。
立倉 一志は28歳の男です。

という結果出力になります。

 

 まず、OtokoクラスがNingenクラスを継承するにあたり、「継承される側」であるNingenクラスは、

open class Ningen(val onamae:String,var nenrei:Int,var seibetsu:String)

のようにclassの前にopenをつける必要があります。

 

 そうしておいてから、

class Otoko(onamae:String,nenrei:Int):Ningen(onamae,nenrei,"男")

として、Otokoクラスを宣言しています。

 

 この宣言の前半部分、

 class Otoko(onamae:String,nenrei:Int)

は通常のクラスの宣言と同じ(ただし、valやvarはつけません※ここ要注意

 

 そして後半部分、

:Ningen(onamae,nenrei,"男")

が、OtokoクラスはNingenクラスの一種(継承している)である事を示している部分です。

:の後にクラスを指定する、というのは

val onamae:Stringと同じ要領ですね。

 

class Otoko(onamae:String,nenrei:Int):Ningen(onamae,nenrei,"男")

を意訳すると、

名前と年齢はこれから決める)は人間の一種で、人間としての名前と年齢は男として与えられた通りだけど性別はと決まっています。」

という意味になります。

 

 main関数内で、

var kazuchan=Otoko("立倉 一志",28)

kazuchanというオブジェクトを「お名前は立倉 一志、年齢28歳」のOtokoとして作成しています。

 この作成時に、"立倉 一志",28として与えたデータは、

 class Otoko(onamae:String,nenrei:Int)

 のonamae:String,nenrei:Intとして受け取られ、

:Ningen(onamae,nenrei,"男")

にそのまま渡されています。

 この時、kazuchan作成時に書いていなかった、性別"男")という情報を付与しています。

 

kazuchanはNingenクラスを継承した、Otokoクラスのオブジェクトである。

というのを意訳すると、

kazuchanは人間の一種である男のうちの一人である。

という事になります。

 

 

 

 

…と、長くなってきたので今回はこのへんで!

 次回もまた、よろしくくです^^