>

배수를 곱한 추상 클래스가 있습니다 :

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

이제 짐작할 수 있듯이 Animal에서 파생 된 'Cat', 'Dog', 'Parrot'등의 클래스를 만들고 싶습니다.

그러나 Cat 클래스를 정의 할 때 이름, 연령, ... 필드가 무엇인지 모르므로 코드가 컴파일되지 않습니다.

class Cat : Animal()

아직 알지 못하는 변수를 여기에 전달해야하므로 컴파일하지 않습니다.

또 다른 질문은 : 수업 내에서 내부 수업을 시작하는 방법? 고양이는 고양이 인 어머니와 아버지가 있습니다.

  • 답변 # 1

    상속에 관한 문서를 확인하십시오

    기본 생성자가 있으므로 매개 변수를 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)
    
    

  • 답변 # 2

    컨스트럭터없이 Animal 클래스를 지정하고 하위 유형에서만 생성자를 정의 할 수 있습니다

    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
        }
    }
    
    

  • 답변 # 3

    부수적으로, 제네릭을 사용하여 범위를 도울 수 있습니다

    예 :

    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)
    
    

관련 자료

  • 이전 java - 최종 클래스의 Powermock 정적 최종 방법
  • 다음 파이썬 모듈을 호출 가능하게 만들기