継承を作成すると、オブジェクト定義を親として継承することを教えられました。
Kotlinでは、次のコードを実行できます。
fun main(args : Array<String>) {
open class aux (val input : Int) {
fun print() {
System.out.println(this.input)
}
}
class baz : aux(5)
class bar : aux(6)
val x = baz()
x.print() // 5
val y = bar()
y.print() // 6
}
この場合、baz(またはbar)がauxから継承していることはわかりません。継承されたクラスにはさまざまな実装があり、1つはコンストラクター内で5を取り、もう1つは6を取ります。これにより、まったく異なる動作が可能になります。
私にとってインスタンスの継承はプログラマーとして見たものとはかけ離れているため、このコードの機能に名前を付ける方法がわかりません。
このコードがより良いソフトウェアを作るのに役立つとは思えませんが、それは素晴らしいことですが、デバッグするのも非常に困難です
私はあなたの主張を理解していません。Kotlin固有ではありません。Javaでも同じことができます。
class Main {
public static void main(String[] args) {
Aux bar = new Bar();
Aux baz = new Baz();
System.out.println(bar.getValue());
System.out.println(baz.getValue());
}
}
class Aux {
private int value;
public Aux(int i) {
value = i;
}
public int getValue() {
return value;
}
}
class Baz extends Aux {
public Baz() {
super(4);
}
}
class Bar extends Aux {
public Bar() {
super(5);
}
}
それは印刷します:
5
4
より具体的な例を示すために、Vehicle
コンストラクター引数としてintを受け入れる基本クラス(たとえば、ホイールの数)を作成し、その値を必要としない子クラス(たとえば、Car extends Vehicle
常に4つのホイールを持つ)を作成できます。それがあなたのドメインにとって合理的である場合、あなたはそれを「意味のある価値を与える」と考えることができます。もちろん、必要に応じて、呼び出し元からその値を取得できます。
class Baz extends Aux {
public Baz(int value) {
super(value);
}
}
一般的な考え方は、子コンストラクターから親オブジェクトを構築するために必要なすべてのデータを提供する必要があるということです。その後、子オブジェクトの作成を完了する必要がありますが、そのオブジェクトが追加のデータを必要としない/受け入れる場合は、他の引数は必要ありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加