从Kotlin的抽象类inheritance多个variables

我有一个抽象类与乘法variables:

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

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

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

 class Cat : Animal() 

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

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

检查有关inheritance的文档

既然你有一个主要的构造函数,你将不得不将parameter passing给super

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

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

 abstract class Animal { var name = "" var age = 0 lateinit var mother: Animal lateinit var father: Animal lateinit var friends: ArrayList } 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 } } 

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

例如

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