如何命名这种“继承”?

时间:2018-02-16 22:19:54

标签: class inheritance kotlin instance

我被教导当你创建一个继承时,你继承了一个对象 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个。这使得它们可以完全不同地工作

我不知道如何命名这段代码的作用,因为对我来说,继承一个实例远非我所看到的程序员。

我想不出这个代码有助于制作更好的软件的任何情况,确定它很好,但它也很难调试

1 个答案:

答案 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);
    }
}

一般的想法是,您需要提供从子构造函数构建父对象所需的所有数据。之后,您需要完成构建子对象,但如果该对象不需要/接受任何其他数据,那么您不需要其他参数。