▶앞에서 함께 공부한내용은 제외합니다.◀
5. 다형성 : 사실 알게모르게 앞부분에서도 사용되었다.
1) 공통된 부모를 가진 자식클래스(객체)들을 리스트에 담아주는것
2) 그렇게 자식클래스(객체)를 담은 변수(리스트)를 이용해서 부모클래스에 있는 메소드를 사용하는것
3) 인터페이스를 이용한 다형성
interface SuperCar{}
open class Bus(val licencePlate: String, val departure: String, val arrive: String) {
fun engineStarart() {
println("부릉부릉")
println("$licencePlate 차량이 엔진을 켰습니다.")
}
open fun departure() {
println("출발합니다.")
println("$departure 에서 $arrive 로 도착합니다.")
}
}
class WideBus(licencePlate: String, var routeNumber: String, departure: String, arrive: String) :
Bus(licencePlate, departure, arrive),SuperCar {
override fun departure() {
super.departure()
}
}
class ExpressBus(licencePlate: String, departure: String, arrive: String) :
Bus(licencePlate, departure, arrive),SuperCar {
override fun departure() {
super.departure()
}
}
class CityBus(licencePlate: String, val routeNumber: String, departure: String, arrive: String) :
Bus(licencePlate, departure, arrive) {
}
fun main() {
val seoulToBusanBus = ExpressBus("21가 3683", "서울", "부산")
val seoulToChunanBus = WideBus("35가 3683","M6000", "서울","천안")
seoulToChunanBus.routeNumber = "M9000"
val cityBus = CityBus("35가 2306", "999", "강남", "논현")
val terminal = arrayListOf<Bus>(seoulToBusanBus,seoulToChunanBus,cityBus)
terminal.forEach{it ->
it.engineStarart()
it.departure()
}
}
1) 공통된 부모를 가진 자식클래스(객체)들을 리스트에 담아주는것
위 코드에서 보면 부모클래스(Bus)라는 공통분모로 엮인 자식클래스(객체)들을 인스턴스화 해서 만들어진 변수들 seoulToBusanBus, seoulToChunanBus, cityBus들을 terminal이라는 리스트에 담아준것을 다형성 이라고 한다.
(이렇게 자식클래스객체들을 부모클래스에 담는것을 업캐스팅이라고 한다.)
2) 그렇게 자식클래스(객체)를 담은 변수(리스트)를 이용해서 부모클래스에 있는 메소드를 사용하는것
위 코드에서 자식클래스(객체)들로 만들어진 변수들이 담긴 리스트(terminal)을 받은 it 이용해서 부모객체의 메소드를 it.engineStart(), it.departure() 이런식으로 이용하는것 역시 다형성 이라고 한다.
3) 인터페이스를 이용한 다형성
▼위 코드에서 main함수만 바꿨다 나머지코드는 위 코드 참조▼
fun main() {
val seoulToBusanBus = ExpressBus("21가 3683", "서울", "부산")
val seoulToChunanBus = WideBus("35가 3683","M6000", "서울","천안")
seoulToChunanBus.routeNumber = "M9000"
val cityBus = CityBus("35가 2306", "999", "강남", "논현")
val terminal = arrayListOf<SuperCar>(seoulToBusanBus,seoulToChunanBus,cityBus)
}
ㄱ.부모클래스(Bus)를 상속받은 자식클래스는 ExpressBus, WideBus, CityBus이고
ㄴ. 인터페이스(Supercar)를 상속받은 자식클래스는 ExpressBus, WideBus 이다.
ㄷ. main함수에서 바뀐부분은 terminal의 리스트 형식이 부모클래스<Bus>에서 ㅡ> 인터페이스인<SuperCar>로 바뀌었다는 점이다.
ㄹ. 이렇게되면 인터페이스(Supercar)를 상속받지못한 cityBus는 terminal이라는 리스트에 추가되지 못한다.
ㅁ. 즉 인터페이스(Supercar)를 상속받은 자식클래스들을 공통분모로 엮어서 리스트로 만드는 것이 인터페이스를 이용한 다형성이다.
'TIL, WIL(일기)' 카테고리의 다른 글
230821 SNS앱 만들기 프로젝트를 마무리하며 (4) | 2023.08.21 |
---|---|
230810 4탄.객체지향프로그램(OOP) (0) | 2023.08.12 |
230810 2탄.객체지향프로그램(OOP) (0) | 2023.08.10 |
230809 1탄.객체지향프로그램(OOP) (0) | 2023.08.09 |
23.08.06 2탄 registerForActivityResult (0) | 2023.08.06 |