サーチ…
前書き
どんなオブジェクト指向プログラミング言語でも、ある種のクラス継承があります。私に改訂させてください:
あなたがフルーツの束をプログラムしなければならないと想像してください: Apples
、 Oranges
とPears
。彼らはすべてサイズ、形、色が異なります。そのため、私たちは異なるクラスを持っています。
しかし、彼らの違いが一瞬でも問題ではないと言いましょう。正確には関係なく、 Fruit
ほしいと思っていますか? getFruit()
はどのような戻り型がありますか?
答えはクラスFruit
です。私たちは新しいクラスを作り、それからすべての果実を継承します!
構文
- オープン{ベースクラス}
- class {派生クラス}:{基本クラス}({Init Arguments})
- override {関数の定義}
- {DC-Object}は{Base Class}です== true
パラメーター
パラメータ | 詳細 |
---|---|
ベースクラス | 継承元のクラス |
派生クラス | ベースクラスから継承するクラス |
Init引数 | 基本クラスのコンストラクタに渡される引数 |
関数定義 | 基本クラスのコードと異なるコードを持つ派生クラスの関数 |
DCオブジェクト | 派生クラスの型を持つ「派生クラスオブジェクト」オブジェクト |
基本: 'open'キーワード
Kotlinでは、クラスはデフォルトで最終的です 。つまり、クラスは継承できません。
クラスの継承を許可するには、 open
キーワードを使用しopen
。
open class Thing {
// I can now be extended!
}
注意:抽象クラス、密閉クラス、およびインタフェースは、デフォルトで
open
れます。
クラスからフィールドを継承する
基本クラスの定義:
open class BaseClass {
val x = 10
}
派生クラスの定義:
class DerivedClass: BaseClass() {
fun foo() {
println("x is equal to " + x)
}
}
サブクラスの使用:
fun main(args: Array<String>) {
val derivedClass = DerivedClass()
derivedClass.foo() // prints: 'x is equal to 10'
}
クラスからメソッドを継承する
基本クラスの定義:
open class Person {
fun jump() {
println("Jumping...")
}
}
派生クラスの定義:
class Ninja: Person() {
fun sneak() {
println("Sneaking around...")
}
}
忍者はPersonのすべてのメソッドにアクセスできます
fun main(args: Array<String>) {
val ninja = Ninja()
ninja.jump() // prints: 'Jumping...'
ninja.sneak() // prints: 'Sneaking around...'
}
プロパティとメソッドのオーバーライド
プロパティのオーバーライド(読み取り専用と変更可能の両方):
abstract class Car {
abstract val name: String;
open var speed: Int = 0;
}
class BrokenCar(override val name: String) : Car() {
override var speed: Int
get() = 0
set(value) {
throw UnsupportedOperationException("The car is bloken")
}
}
fun main(args: Array<String>) {
val car: Car = BrokenCar("Lada")
car.speed = 10
}
メソッドのオーバーライド:
interface Ship {
fun sail()
fun sink()
}
object Titanic : Ship {
var canSail = true
override fun sail() {
sink()
}
override fun sink() {
canSail = false
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow