我被教导当你创建一个继承时,你继承了一个对象 definition 作为父对象。
在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,因为继承类有不同的实现,一个需要5个内部构造函数,另一个需要6个。这使得它们可以完全不同地工作
我不知道如何命名这段代码的作用,因为对我来说,继承一个实例远非我所看到的程序员。
我想不出这个代码有助于制作更好的软件的任何情况,确定它很好,但它也很难调试
答案 0 :(得分:2)
我不明白你的观点。它不是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作为构造函数参数(例如,轮数),并且您可以让子类不需要该值(例如, a Car extends Vehicle
总共有4个轮子。您可以将其视为&#34;提供有意义的价值&#34;如果您的域名合理。当然,如果您愿意,可以从调用者那里获取该值:
class Baz extends Aux {
public Baz(int value) {
super(value);
}
}
一般的想法是,您需要提供从子构造函数构建父对象所需的所有数据。之后,您需要完成构建子对象,但如果该对象不需要/接受任何其他数据,那么您不需要其他参数。