[Kotlin] Class & Inheritance

15066 ワード

クラスの基本構造


クラスは、値とその値を使用する機能を組み合わせます.
ユニークな特徴値<属性>+機能実装<関数>

≪インスタンス|Instance|emdw≫


クラスを使用して作成された異なるプロパティを持つオブジェクト.
fun main() {
  
  var a =Person("박보영", 1990) //인스턴스 a
  var b = Person("전정국", 1997) //인스턴스 b
  var c = Person("장원영",2004)  //인스턴스 c
  
  a.introduce()
  b.introduce()
  c.introduce()
  
}

class Person(var name:String, val birthYear: Int) {
    fun introduce(){ //함수 추가
	    println("안녕하세요, ${birthYear}년생 ${name}입니다")
		}
  }
オブジェクト向けの基本構造+関数言語の利点=エラー

クラスのコンストラクタ


:新しいインスタンスを作成するために呼び出される特殊な関数.
<機能>
初期化
  • インスタンスのプロパティ
  • インスタンスの作成に必要な構文-init関数によって
  • を実装できます.
    (init関数は、ジェネレータによるインスタンスの作成時に呼び出されるパラメータまたは戻りタイプのない特殊な関数です)

    デフォルト作成者


    :クラス作成時のデフォルト宣言

    ほじょジェネレータ


    :必要に応じてさらに宣言します.
    インスタンスの作成を容易にするために、基本作成者とは異なる形式の作成者を提供するか、追加の構築を実行する機能を提供するか、必要に応じて宣言を追加するか、基本作成者、およびインスタンスの作成を容易にするための他の形式の作成者を提供するか、追加の構築を実行する機能を提供します.
    セカンダリジェネレータを作成する場合は、デフォルトジェネレータでプロパティを初期化する必要があります.

    アクセシビリティジェネレータ呼び出しデフォルトジェネレータ

    constructor(name:String):this(name,1997)
    fun main() {
      
      var a =Person("박보영", 1990)
      var b = Person("전정국", 1997)
      var c = Person("장원영",2004)
      
      var d = Person("박지민")
      var e = Person("김석진")
      var f= Person("김남준")
     
      
    }
    
    class Person(var name:String, val birthYear: Int) {
       init {
           println("${this.birthYear}년생 ${this.name}님이 생성되었습니다")
       }
        constructor(name:String):this(name, 1997){
            println("보조생성문이 사용되었습니다")
        }
     }

    クラスの継承


    inheritance
    継承の必要性

  • 既存のクラスを拡張して、新しいプロパティまたは関数を追加するクラスを作成する必要がある場合.

  • コード管理を容易にするために共通点を抽出するために複数のクラスが作成されました.
  • スーパークラス:属性と関数を継承するクラス
    サブクラス:継承クラス
    実装継承:Animal Dog,Cat決定
    Openは、クラスを宣言するときにクラスに割り当てられるキーワードで、クラスを継承します.
    fun main() {
      var a =Animal("별이", 5, "개")
      var b = Dog("별이", 5)
      a.introduce()
      b.introduce()
      
      b.bark()
      var c = Cat("루이", 1)
      c.introduce()
      c.meow()
    }
    
    open class Animal(var name:String, var age:Int, var type:String){
        fun introduce(){
            println("저는 ${type} ${name}이고, ${age}살입니다.")
        }
    }
    class Dog(name: String, age:Int) : Animal(name, age, "개"){
        fun bark() {
            println("멍멍")
        }
    }
    
    class Cat(name:String, age:Int): Animal(name,age,"고양이"){
        fun meow(){
            println("야옹야옹")
        }
    }
    
    결과값 : 
    저는 개 별이이고, 5살입니다.
    저는 개 별이이고, 5살입니다.
    멍멍
    저는 고양이 루이이고, 1살입니다.
    야옹야옹
    継承ルール
  • サブクラスは、スーパークラスに存在する属性と同じ名前の属性を持つことはできません.
  • を生成する場合は、スーパークラスの作成者を呼び出す必要があります.