从Kotlin的抽象类继承多重变量

我有一个抽象类与乘法变量:

abstract class Animal(var name: String, var age: Int, var mother: Animal, var father: Animal, var friends: ArrayList<Animal>) 

现在,正如你可能猜到的那样,我想要创造出来自动物的“猫”,“狗”,“鹦鹉”等类。

但是,当我定义Cat类时,我不知道名称,年龄,…字段是什么,所以代码不能编译。

 class Cat : Animal() 

不编译,因为我们需要通过这里变量,我们还不知道。

另一个问题是:如何在一个类中创建一个内部类? 一只猫既有母亲也有父亲,也都是猫。

3 Solutions collect form web for “从Kotlin的抽象类继承多重变量”

检查有关继承的文档

既然你有一个主要的构造函数,你将不得不将参数传递给super

 abstract class Animal(var name: String, var age: Int, var mother: Animal, var father: Animal, var friends: ArrayList<Animal>) class Cat(name: String, age: Int, mother: Animal, father: Animal, friends: ArrayList<Animal>) : Animal(name, age, mother, father, friends) 

你可以指定你的动物类没有建筑师,并只在子类型中定义构造函数。

 abstract class Animal { var name = "" var age = 0 lateinit var mother: Animal lateinit var father: Animal lateinit var friends: ArrayList<Animal> } class Cat: Animal { // only initialize the fields you need for this specific type constructor(n: String) { name = n } // define a second constructor for your second question constructor(m: Animal, f: Animal) { mother = m father = f } } 

作为一个方面说明,你可以使用泛型来帮助范围

例如

 abstract class Animal<T : Animal<T>>( var name: String, var age: Int, var mother: T, var father: T, var friends: MutableList<Animal> ) class Cat( name: String, age: Int, mother: Cat, father: Cat, friends: MutableList<Animal> ) : Animal<Cat>(name, age, mother, father, friends) 
  • 是否有一个内置的Kotlin方法来将void函数应用于值?
  • Android Studio更新到0.6后,Kotlin问题
  • 在类路径中使用Kotlin运行时库执行Java和Kotlin程序
  • 不幸的是,“应用程序名称”已经停止因为Jsoup库
  • Kotlin反射无法访问使用网站的目标注释
  • 启动覆盖活动,而不显示应用程序的其余部分
  • RxJava Observable to Completable,如何避免toBlocking()
  • Kotlin HTML-Builder
  • 我们如何使用自动重新加载?
  • 我如何将TeaVM添加到我现有的libGDX项目中?
  • Gradle编译在Linux上找不到tornadofx
  • Kotlin language will be the best programming language for Android.