처음으로 Kotlin: Kotlin의 학급 특징을 정리했습니다.

10191 단어 Kotlin

Kotlin 클래스의 특징


Kotlin 클래스에는 다음과 같은 특징이 있습니다.마음대로 열거해 보세요.

  • new 키워드가 없으면 실례화할 수 있습니다.

  • new에 키워드를 실례화하면 오류가 발생합니다
  • 구성 요소는 속성과 방법(함수)만 있다
  • 속성
  • 기본 공공 속성은public입니다

  • lateinit 키워드를 추가하면 나중에 초기화할 수 있습니다.이런 상황에서, 그것은 반드시mutable이어야 한다.즉, 가변 변수 키워드 var에서 선언해야 합니다

  • lazy 키워드를 추가한 후에도 초기화할 수 있습니다.이런 상황에서, 그것은 반드시immutable이어야 한다.즉, 변하지 않는 변수 키워드val로 설명해야 합니다
  • 클래스의 함수
  • 유외 함수와 완전히 같은 방법으로 정의한다

  • fun 키워드를 추가하여 정의합니다
  • 함수도 때때로 방법이라고 불린다
  • 부족한 상황에서 클래스와 방법의 계승 가능성은final이다.상속이 허용되지 않습니다.
  • 계승하고 싶을 때 오픈 키워드를 명확하게 추가합니다
  • 클래스에서 내부 클래스, 즉 내부 클래스를 정의할 수 있다.
  • 내부 클래스에 inner 키워드를 명확하게 추가함으로써 정의된 클래스의 구성원에 접근할 수 있습니다

  • init 키워드가 있는 코드 블록은 구조 함수의 정의입니다.즉, 인스턴스에서 실행됩니다
  • 같은 파일에는 여러 클래스가 포함될 수 있습니다
  • 지연 초기화


    잠시 후 초기화 지연 초기화는lateinit 키워드와lazy 키워드를 포함합니다.
    lateinit 키워드에 대해mutable이기 때문에 변수 키워드 var에서 설명해야 합니다.초기화 후 변경할 수 있다는 뜻이다.
    lazy 키워드에 대해immutable이기 때문에 변하지 않는 변수 키워드val로 설명해야 합니다.초기화 후에는 변경할 수 없다는 뜻이다.
    지연 초기화 코드 예
    class LateinitAndLazy {
      lateinit var lateinitString: String
    
      val lazyString: String by lazy {
        val valueOfString = "This train consists 12 cars."
        valueOfString
      }
    
      fun lateinitStringLength() {
        lateinitString = 
          "Boardingn locations are indicated by white circles and No.1 through 7."
    
        val length = lateinitString.length
        println("Length of 'lateinitString' is $length" )
    
        lateinitString = "We are soon making brief stop at Bentencho."
      }
    
      fun lazyStringLength() {
        val length = lazyString.length
        println("Length of 'lazyString' is $length" )
      }
    }
    
    fun main( args: Array<String> ) {
      LateinitAndLazy().lateinitStringLength()
      LateinitAndLazy().lazyStringLength()
    }
    
    지연 초기화 코드 예시 실행 결과
    Length of 'lateinitString' is 68
    Length of 'lazyString' is 28
    

    상속류


    클래스가 부족합니다. 즉, 어떤 내용도 지정하지 않은 상태에서 성명하면final 클래스로 계승할 수 없습니다.
    오픈 키워드를 명확하게 추가하여 정의합니다. 정의된 클래스는 계승을 허용합니다.
    클래스 상속 코드 예
    open class Employee( name: String, age: Int ) {
      val name = name
      val age  = age
    }
    
    class Company: Employee( "Jhonson", 58 )
    
    fun main(args: Array<String>) {
      println(
        "Name is ${Company().name} and " +
        "Age is ${Company().age}."
      )
    }
    
    클래스 계승 코드 예시의 실행 결과
    Name is Jhonson and Age is 58.
    
    open 키워드를 추가하지 않았을 때의 컴파일 오류
    prog.kt:6:16: error: this type is final, so it cannot be inherited from
    class Company: Employee( "Jhonson", 58 )
                   ^
    

    내부 클래스 정의


    내부 클래스의 정의에 inner 키워드를 추가하지 않으면 내부 클래스를 포함하는 외부 클래스의 구성원에 접근할 때 컴파일 오류가 발생합니다.
    내부 클래스 코드 예
    class Outer {
      private val outer: String = "Outerクラス"
    
      class Child {
        fun child() = "Childクラス"
        fun errorChild() = outer //コンパイルエラー
      }
    
      inner class Inner {
        fun innerFoo() = outer
      }
    }
    
    fun main(args: Array<String>) {
      println( Outer.Child().child() )
      println( Outer().Inner().innerFoo() )
    }
    
    내부 클래스 코드 예시의 실행 결과
    Childクラス
    Outerクラス
    
    컴파일 오류
    innerClass.kt:6:24: error: unresolved reference: outer
        fun errorChild() = outer //コンパイルエラー
                           ^
    

    인스턴스 처리 정의


    실례화 클래스에서 실행되는 동작은 init 키워드 블록에 명확하게 설명되어 있습니다.
    init 키워드를 사용한 코드 예시
    class Baa {
      val baa: Float
    
      init {
        baa = 3.14f
      }
    
      fun dispBaa() { println( "baa is $baa!" ) }
    }
    
    fun main( args: Array<String> ) {
      Baa().dispBaa()
    }
    
    init 키워드 코드 예시 실행 결과
    baa is 3.14!
    

    Visual Studio 코드를 좋아합니다.


    나는 마크다운의 코드 원본 코드 하이라이트를 좋아하지 않는다.저는 개인적으로 Visual Studio 코드의 배경색과 소스 코드 하이라이트를 좋아합니다.
    LateinitAndLazy.kt : Visual Stduio Code on Windows10 Pro

    Compile and Execute: Windows PowerShell on Windows10 Pro

    innerClass.kt : Visual Stduio Code on Windows10 Pro

    Compile and Execute: Windows PowerShell on Windows10 Pro

    좋은 웹페이지 즐겨찾기