자식 클래스의 객체가 부모 클래스 자료형으로 형변환 되는 것
자식클래스가 가진 내용이 부모클래스로부터 가져온 거기 때문에 강제 업캐스팅 가능함
fun main() {
println("몇 마리를 생성하시겠습니까?")
var count = readLine()!!.toInt() //null을 절대 입력받지 않도록 명시(!!)한 변수(null입력되면 에러)
var birds = mutableListOf<Bird>() //Bird 클래스 객체를 요소로 넣을 수 있는 수정가능한 리스트
for(idx in 0..count-1) { //0부터 입력한 값-1까지 반복
println("조류의 이름을 입력해주세요")
var name = readLine()!! //null을 절대 입력받지 않도록 명시한 변수(null입력되면 에러)
// as Bird는 생략가능
//birds.add(Sparrow(name) as Bird) //자식 클래스 Sparrow 객체를 Bird 클래스로 업캐스팅
birds.add(Sparrow(name)) //자식 클래스 Sparrow를 Bird 클래스로 업캐스팅
}
println("============조류 생성완료============")
for(bird in birds) { //Bird 클래스 객체를 하나씩 꺼내와서
bird.fly() //메소드 실행
}
}
open class Bird(name: String) { //상속 가능한 Bird 클래스
var name: String //name 프로퍼티
//주생성자를 이용한 명시적 초기화
init {
this.name = name //파라미터로 name이라는 문자열을 가져와서 name 프로퍼티 초기화
}
fun fly() { //Bird 클래스의 메소드
println("${name}이름의 조류가 날아요~")
}
}
//Bird 클래스의 자식 클래스
//파라미터로 name이라는 문자열을 받음
//Bird 클래스로 name이라는 문자열을 전달함
//Bird클래스는 init 생성자를 이용해서 초기화됨
class Sparrow(name: String): Bird(name) {
}
부모 클래스의 객체가 자식 클래스 자료형으로 형변환 되는 것
부모 클래스가 가진 정보가 자식 클래스보다 가진 정보가 많기 때문에 오류 발생
fun main() {
println("몇 마리를 생성하시겠습니까?")
var count = readLine()!!.toInt() //!!키워드를 이용해 null을 절대 입력받지 않도록 명시한 변수(null입력되면 에러)
var birds = mutableListOf<Bird>() //Bird 클래스 객체를 요소로 넣을 수 있는 수정가능한 리스트
for(idx in 0..count-1) { //0부터 입력한 값-1까지 반복
println("조류의 이름을 입력해주세요")
var name = readLine()!! //!!키워드를 이용해 null을 절대 입력받지 않도록 명시한 변수(null입력되면 에러)
// as Bird는 생략가능
//birds.add(Sparrow(name) as Bird) //자식 클래스 Sparrow 객체를 Bird 클래스로 업캐스팅
birds.add(Sparrow(name)) //자식 클래스 Sparrow를 Bird 클래스로 업캐스팅
}
println("============조류 생성완료============")
for(bird in birds) {
bird.fly()
}
// 다운캐스팅 오류
// Sparrow는 Bird가 가져야할 정보를 모두 가지고 있지 않기 때문임
// var s1:Sparrow = birds.get(0)
}
open class Bird(name: String) { //상속 가능한 Bird 클래스
var name: String //name 프로퍼티
//주생성자를 이용한 명시적 초기화
init {
this.name = name //파라미터로 name이라는 문자열을 가져와서 name 프로퍼티 초기화
}
fun fly() { //Bird 클래스의 메소드
println("${name}이름의 조류가 날아요~")
}
}
//Bird 클래스의 자식 클래스
//파라미터로 name이라는 문자열을 받음
//Bird 클래스로 name이라는 문자열을 전달함
//Bird클래스는 init 생성자를 이용해서 초기화됨
class Sparrow(name: String): Bird(name) {
}