Kotlin - Inheritance(상속)

이동수·2024년 9월 9일

Kotlin

목록 보기
17/33
post-thumbnail

코틀린은 상속 금지가 기본값임, 클래스 상속해주려면 open 상태로해야함

Inheritance

코틀린에서 서브클래스는 수퍼클래스에 존재하는 속성과 '같은 이름'의 속성을 가질수 없음 (그러나 open해서 오버라이딩 하면 사용가능)
class Dog (name : String, age : Int)

  • 코틀린의 최상위 클래스Any
  • 클래스에 상위타입을 선언하지 않으면 Any가 상속됨
class A //암시적인 Any상속
class B : Any() //명시적인 Any상속
  • Any는 java.lang.Object와는 다른 클래스임
    • Any클래스에는 equlas(), hashCode(), toString()만 있다
  • 명시적으로 상위타입을 선언하려면 클래스 해더의 콜론(:)뒤에 상위타입을 선언하면 됨
open class Base(p: Int)

class A(p: Int) : Base(p)
  • 수퍼클래스에 기본 생성자가 없으면, 각각의 보조생성자에서 상위타입을 super키워드를 이용해 초기화 해주어야함. or 다른 생성자에게 상위타입을 초기화할 수 있게 위임해주어야함
	class Myview : View {
		constructor() : super(1)
		constructor(ctx: Int) : this()
		constructor(ctx: Int, attrs:Int) : super(ctx, arrts)
	}
  • 코틀린 class는 final임(상속되게 하려면 open을 해줘야함)
  • 클래스 자체 속성을 만들어주는 var을 붙이지 않음, 일반 패러미터로 받아 animal클래스 생성자에 직접 넘겨주어야함
  • var, val을 붙이면 속성으로 선언됨
  • 단일 상속만 가능
  • class가 상속이 선언되어 있지 않으면 any클래스를 자동으로 상속받음
    • any메소드(함수) - equals(), hashCode(), toString()
  • private가 아닌 모든 속성과 함수를 상속받음
  • 서브클래스가 생성될때는 반드시 수퍼클래스의 생성자까지 호출해야함
  • 상속은 class 뒤에 : 를 붙이고 수퍼클래스의 생성자를 호출할수 있도록 해주면됨
    class Dog (name : String, age : Int) : animal (name,age,"개") 개는 고정된 값을 넘김
    var a = animal("별이", 5, "개") 이 두개가 같음
    var b = Dog("별이",5)
  • sub class에서 쓰는 변수가 super꺼인지 sub꺼인지 헷갈리면 this,super 사용하자
  • property override규칙
    • 이름과 타입이 같아야함
    • val → var, val 가능
    • var → var만 가능
    • null허용 → null불허용 가능
    • null불허용 → null허용 불가능
fun main(){
    var a = animal("별이", 5, "개")
    var b = Dog("별이",5)
    //위에 두개 같음
    a.intro()
    b.intro()

    b.bark()
}
open class animal(var name : String, var age : Int, var type : String){
    fun intro(){
        println("저는 $name 이고, $age 살 입니다")
    }
}
class Dog (name : String, age : Int) : animal(name,age,"개"){ //  : animal()이 상속받는다는뜻
    fun bark(){
        println("왈왈")
    }
    fun animal(){

    }
}
class Cat(name: String, age : Int) : animal(name,age,"고양이"){ //생성자에서 이름과 나이르 받긴함, 클래스 자체 속성으로 만들어주는 var 붙이지않음 일반 패러미터로받는다(var,val을 붙이면 속성으로 선언)
    fun meow(){
        println("냐옹")
    }
}

ex)

any - 인간 - 남자(수염이난다) - 표인수(강의한다)

………………..- 여자(수유한다) - 서윤지(강의를 듣는다)

번외

  • 클래스는()안에 var,val가 들어가야하고
  • 함수는 var, val가 안들어가고
  • 서브클래스도 var,val가 안들어간다

0개의 댓글