Kotlin의 구성 방법 또는 속성의 클래스

3587 단어

주 구조 방법과 문장 블록 초기화


주 구조 방법을 성명하다
class User constructor(_nickname: String){
    val nickname: String
    init { 
        nickname = _nickname
    }
}

위의 예에서 주 구조 방법에 제한이 있기 때문에 초기화 코드를 포함할 수 없기 때문에 초기화 문장 블록을 사용해야 한다.
이 예에서 constructor 키워드도 제거할 수 있다
class User2 constructor(_nickname: String){
    val nickname = _nickname
}

만약 속성이 상응하는 구조 방법의 매개 변수로 초기화된다면 코드는 val 키워드를 매개 변수 앞에 추가하는 방식으로 간소화하면 클래스의 속성 정의를 바꿀 수 있다
class User(val nickname:String)

함수 매개 변수와 같이 구조 방법 매개 변수에 기본값을 설명할 수 있습니다
class User(val nickname: String,val isSubscribed: Boolean = true)

만약 하나의 클래스에 부류가 있다면, 주 구조 방법에서도 마찬가지로 부류를 초기화해야 한다
open class User(val nickname: String){...}

class TwitterUser(name:String) : User(name){...}

만약 부류가 어떤 구조 방법을 제공하지 않는다면, 부류의 구조 방법을 표시해서 부류에 아무런 인자가 없어도 사용해야 한다
open class Button
class RadioButton : Button()

클래스 외부의 코드를 실례화하지 말고 구조 방법을 private로 표시할 수 있습니다
class Secretive private constructor(){...}

다른 방식으로 부류를 초기화하다


부류의 여러 가지 구조 방법을 다시 쓸 필요가 있을 때, 여러 개의 종구조 방법을 성명해야 한다
class MyButton : View{

    constructor(ctx:Context):this(ctx, null)
    constructor(ctx: Context,attr: AttributeSet?):super(ctx,attr) 
}    

인터페이스에서 설명하는 속성을 실현하다

interface User {
    val nickname: String
}
  • 자류의 주 구조 방법의 매개 변수 앞에 override 키워드를 더하면 이 속성은 부류User에서 나온 추상적 속성
      class PrivateUser(override val nickname: String) : User 
    
  • 을 실현했음을 나타낸다.
  • nickname 속성은 사용자 정의getter의 방식으로 실현
      class SubscribingUser(val email: String) : User {
          override val nickname: String
              get() = email.substringBefore("@")
      }
    
  • 초기화할 때nickname 속성과 값을 연결하는 방식
  • class FaceBookUser(val accountId:Int) : User {
        override val nickname = getFacebookName(accountId)
    }
    

    추상적 속성 성명을 제외하고 인터페이스에는 gettersetter의 속성이 포함될 수 있다
    interface User {
        val email: String
        val nickname: String
            get() = email.substringBefore("@")
    }
    

    이 인터페이스는 추상적 속성email을 포함하고 nickname 속성은 사용자 정의getter가 있습니다.첫 번째 속성은 하위 클래스에서 다시 써야 하고, 두 번째 속성은 계승될 수 있다.

    Getter 또는 setter를 통한 지원 필드 액세스


    가변 속성을 설명하고, 매번 setter 방문할 때마다 추가 코드를 실행합니다
    class User(val name: String){
        var address: String = "unspecified"
            set(value) {
                println("Address was changed for $name: $address -> $value") 
                field = value 
            }
    }
    
    val user = User("kangdongpu");
    user.address = "HeBei,SJZ"
    
    Address was changed for kangdongpu: unspecified -> HeBei,SJZ
    
    setter의 함수체에서 지원하는 필드의 값에 접근하기 위해 특수한 표지부호field를 사용했다.getter에서는 수치만 읽을 수 있습니다.setter에서는 읽을 수도 있고 수정할 수도 있습니다.

    액세스 가시성 수정


    클래스 외부에서 수정할 수 없도록 private setter의 속성을 성명합니다
    class LengthCounter {
        var counter:Int = 0
        private set 
    
        fun addWord(word:String){
            counter+=word.length
        }
    }
    

    좋은 웹페이지 즐겨찾기