Kotlin 입 갱 (4) 류 와 계승 1

13160 단어 Kotlin
kotlin 의 클래스 는 자바 와 같이 클 라 스 성명 을 사용 합 니 다.
class Person {
}

그러나 구조 함 수 는 자바 와 달리 constructor 키 워드 를 사용 합 니 다. constructor 앞 에 클래스 의 제어 도 메 인 을 추가 할 수 있 습 니 다. 예 를 들 어 private, Public 는 메 인 구조 함수 에 주석 이나 보이 지 않 는 수정자 가 없 으 면 이 constructor 키 워드 를 생략 할 수 있 습 니 다.
class Person constructor(name: String) {
}

class Person private constructor(name: String) {//添加可见性修饰符
}

class Person(name: String) {//省略constructor
}

우 리 는 일반적으로 구조 함수 에서 초기 에 뭔 가 를 바 꾸 지만, 주 구조 함수 에는 코드 가 포함 되 어 있 지 않 기 때문에 초기 화 작업 은 init 키워드 에 넣 습 니 다.
class Person(name: String) {
    init {
          //初始化的工作
       }
}

주 구조 함수 의 매개 변 수 는 클래스 에서 직접 사용 할 수 있 습 니 다.
class Person(name: String) {
    val customerKey = name.toUpperCase()
}

다 구조
//주 구조 함수 없 음
class Person{//多构造
    constructor(name:String)
    constructor(name: String,email: String)
    constructor(name: String,email: String,address:String)
}

만약 클래스 에 메 인 구조 함수 가 있다 면, 모든 구조 함 수 는 메 인 구조 함수 에 this 키 워드 를 사용 하도록 위탁 해 야 합 니 다.
class Person(name:String){

    constructor(name: String,email: String):this(name)
    constructor(name: String,email: String,address:String):this(name)

}

메모: JVM 에서 주 구조 함수 의 모든 매개 변수 가 기본 값 이 있 으 면 컴 파일 러 는 추가 적 인 무 참 구조 함 수 를 생 성하 고 기본 값 을 사용 합 니 다.예 를 들 면:
class Person(val name: String = "")

위의 클래스 는 만 들 때 다음 과 같은 두 가지 kotlin 으로 실체 클래스 를 만 들 수 있 습 니 다. new 키 워드 를 필요 로 하지 않 습 니 다.
 var person = Person()
 var person1 = Person("张三")

이어받다
kotlin 에는 자바 의 extends 와 implements 키워드 가 없습니다. 인터페이스 사용 키 워드 를 계승 하고 실현 합 니 다: 콜론 해결
이 클래스 에 주 구조 함수 가 있다 면 기본 형식 은 (기본 형식의) 주 구조 함수 매개 변 수 를 사용 하여 현지에서 초기 화 할 수 있 습 니 다.
open class Person(name:String)

class Student(name:String) : Person(name)

클래스 의 open 레이 블 은 자바 의 final 과 반대로 다른 클래스 가 이 클래스 에서 계승 할 수 있 도록 합 니 다.기본적으로 Kotlin 의 모든 클래스 는 final 입 니 다.
주 구조 함수 가 없 으 면 모든 구조 함 수 는 슈퍼 키 워드 를 사용 하여 기본 형식 을 초기 화하 거나 다른 구조 함수 에 의뢰 해 야 합 니 다.이러한 상황 에서 서로 다른 구조 함 수 는 기본 유형의 서로 다른 구조 함 수 를 호출 할 수 있 습 니 다.
open class Person{

    constructor(name:String)

    constructor(name: String,age:Int)
}

class Student : Person{
    constructor(name:String) : super(name)
    constructor(name:String,age:Int):super(name,age)
}

덮어 쓰기 방법
부모 클래스 의 방법 이 하위 클래스 를 덮어 쓸 수 있다 면 open 키 워드 를 사용 해 야 합 니 다.
open class Person{

    constructor(name:String)

    constructor(name: String,age:Int)

    open fun eat(){

    }
}

하위 클래스 가 부모 클래스 를 덮어 쓰 려 면 override 키워드 로 설명 해 야 합 니 다.
class Student : Person{
    constructor(name:String) : super(name)
    constructor(name:String,age:Int):super(name,age)

    override fun eat() {
        super.eat()
    }
}

오 버 라 이 드 로 표 시 된 멤버 자체 가 열 려 있 습 니 다. 즉, 하위 클래스 에 덮어 쓸 수 있 습 니 다.다시 덮어 쓰 기 를 금지 하려 면 final 키 워드 를 사용 하 십시오.
내부 클래스 에서 중국 측 이 외부 클래스 인 부 류 는 외부 클래스 이름 으로 제 한 된 슈퍼 키 워드 를 통 해 이 루어 질 수 있다.super@Outer외부 클래스
class Student : Person{
    constructor(name:String) : super(name)
    constructor(name:String,age:Int):super(name,age)

    override fun eat() {
        super.eat()
    }
    inner class mouth{
        fun go(){
            super@Student.eat()
        }
    }
}

만약 에 자 류 가 두 부류 의 부 류 를 물 려 받 았 다 면 두 부류 중 한 가지 방법의 이름 이 같다 면 자 류 가 이 방법 을 실현 할 때 super 가 어떤 부류 의 방법 인지 밝 혀 야 한다.base 대표 부류
추상 류
자바 처럼 abstract 키워드 로 꾸 미 기
abstract class Person{
    abstract fun eat()
}

정적 방법
kotlin 에는 static 키워드 가 없습니다.우 리 는 평소에 개발 할 때 자주 도구 류 를 사용 하고 유형 명 을 직접 호출 하 는 방법 을 사용한다.kotlin 에서 copanion object 를 감 싸 는 방법 은 다음 과 같 습 니 다.
class ImageLoader{
    companion object{
        //默认加载
        fun loadImageView(mContext: Context, path: String, mImageView: ImageView) {
            Glide.with(mContext).load(path).into(mImageView)
        }
    }
}

object 키워드 로 직접 설명 할 수도 있 습 니 다.
object ScreenUtil{
    fun dip2px(context: Context, dpValue: Float): Int {
        val scale = context.resources.displayMetrics.density
        return (dpValue * scale + 0.5f).toInt()
    }
}

호출 할 때 돼 요.
ImageLoader.loadImageView(context, url,imageview)

ScreenUtil.dip2px(this,12f)

속성 과 필드
Kotlin 의 클래스 는 속성 (구성원 변수 상수) 이 있 을 수 있 습 니 다.속성 은 키워드 var 로 가 변 적 이 고 키 워드 val 로 상수 로 설명 할 수 있 습 니 다.
class Man{
    val type= "man"
    var name:String = ""
    var age: Int = 30
}

사용 하기 도 편 하고 요.
val man = Man()
var name = man.name
var age = man.age

const 는 컴 파일 시 상수 를 정의 할 수 있 지만, const 는 최상 위 속성 과 object 대상 의 속성 에 만 사용 할 수 있 습 니 다.
package com.chs.kotlintext

const val TEG = "man"

class Man{
    object SmallMan{
        const val TEG = "small_man"
    }
    val type = "man"
    var name:String = ""
    var age: Int = 30
}

지연 초기 화 속성 과 변 수 는 lateinit 키 워드 를 사용 합 니 다.
class Man{

    lateinit var girl : Girl

}

이 수식 자 는 클래스 의 속성 (주 구조 함수 에서 설명 하 는 var 속성 이 아니 라 이 속성 이 getter 나 setter 를 사용자 정의 하지 않 았 을 때 만 사용 할 수 있 습 니 다) 에 만 사용 되 며, Kotlin 1.2 부터 최상 위 속성 과 부분 변수 에 도 사 용 됩 니 다.이 속성 이나 변 수 는 비 어 있 는 형식 이 어야 하 며, 원생 형식 이 될 수 없습니다.초기 화 전에 lateinit 속성 을 방문 하면 특정한 이상 을 던 집 니 다. 이 이상 은 이 속성 이 방문 되 었 고 초기 화 되 지 않 았 다 는 사실 을 명확 하 게 표시 합 니 다. 1.2 부터 lateinit var 가 초기 화 되 었 는 지 확인 할 수 있 습 니 다 .isInitialized

좋은 웹페이지 즐겨찾기