수색…
소개
모든 객체 지향 프로그래밍 언어에는 어떤 형태의 클래스 상속이 있습니다. 내가 수정하자 :
과일, Apples
, Oranges
및 Pears
잔뜩 프로그램해야한다고 상상해보십시오. 그들은 모두 크기, 모양, 색이 다릅니다. 그래서 우리는 다른 수업을합니다.
그러나 그들의 차이점이 잠깐 문제가되지 않는다고 가정 해 봅시다. 정확하게 Fruit
원하십니까? 어떤 반환 유형은 getFruit()
이 가질 수 있습니까?
대답은 Fruit
입니다. 우리는 새로운 반을 만들고 모든 과일을 그것으로부터 상속받습니다!
통사론
- {기본 클래스}
- 클래스 {파생 클래스} : {기본 클래스} ({초기화 인수})
- override {함수 정의}
- {DC-Object}는 {Base Class}입니다. == true
매개 변수
매개 변수 | 세부 |
---|---|
기본 클래스 | 상속 된 클래스 |
파생 클래스 | 기본 클래스에서 상속받은 클래스 |
Init 인수 | 기본 클래스의 생성자에 전달 된 인수 |
함수 정의 | 기본 클래스에서 다른 코드와 다른 파생 클래스의 함수 |
직류 - 개체 | 파생 클래스의 형식을 가진 "파생 클래스 개체"개체 |
기본 사항 : '공개'키워드
Kotlin에서 클래스는 기본적으로 final 이므로 상속받을 수 없습니다.
클래스에서 상속을 허용하려면 open
키워드를 사용하십시오.
open class Thing {
// I can now be extended!
}
참고 : 추상 클래스, 봉인 된 클래스 및 인터페이스는 기본적으로
open
.
클래스에서 필드 상속
기본 클래스 정의 :
open class BaseClass {
val x = 10
}
파생 클래스 정의 :
class DerivedClass: BaseClass() {
fun foo() {
println("x is equal to " + x)
}
}
하위 클래스 사용 :
fun main(args: Array<String>) {
val derivedClass = DerivedClass()
derivedClass.foo() // prints: 'x is equal to 10'
}
클래스에서 메서드 상속
기본 클래스 정의 :
open class Person {
fun jump() {
println("Jumping...")
}
}
파생 클래스 정의 :
class Ninja: Person() {
fun sneak() {
println("Sneaking around...")
}
}
닌자는 Person의 모든 메소드에 액세스 할 수 있습니다.
fun main(args: Array<String>) {
val ninja = Ninja()
ninja.jump() // prints: 'Jumping...'
ninja.sneak() // prints: 'Sneaking around...'
}
속성 및 메서드 재정의
속성 무시 (읽기 전용 및 변경 가능) :
abstract class Car {
abstract val name: String;
open var speed: Int = 0;
}
class BrokenCar(override val name: String) : Car() {
override var speed: Int
get() = 0
set(value) {
throw UnsupportedOperationException("The car is bloken")
}
}
fun main(args: Array<String>) {
val car: Car = BrokenCar("Lada")
car.speed = 10
}
메소드 오버라이드 :
interface Ship {
fun sail()
fun sink()
}
object Titanic : Ship {
var canSail = true
override fun sail() {
sink()
}
override fun sink() {
canSail = false
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow