package days02
fun main(){
val obj31 = TestClass31() // Inter1 을 상속(구현)받은 자식클래스
val obj32 = TestClass32() // Inter2 를 상속(구현)받은 자식클래스
val obj33 = TestClass33() // Inter1, Inter2 을 상속(구현)받은 자식클래스
obj1.inter1_Method1()
obj1.inter1_Method2()
obj2.inter2_Method1()
obj2.inter2_Method2()
obj3.inter1_Method1()
obj3.inter2_Method1()
obj3.inter1_Method2()
obj3.inter2_Method2()
// 부모중 해달 인터페이스가 있는 객체만 전달인수로 사용이 가능
testFun31( obj1 ) // obj32 는 전달할수 없음
testFun32( obj2 ) // obj32 는 전달할수 없음
testFun31( obj3 ) // Inter1 이 구현되었으므로 전달인수로 전달 가능
testFun32( obj3 ) // Inter2 이 구현되었으므로 전달인수로 전달 가능
}
fun testFun1( obj:Inter1 ){
obj.inter1Method1()
obj.inter1Method2()
}
fun testFun2( obj:Inter2 ){
obj.inter2Method1()
obj.inter2Method2()
}
// 인터페이스 : 추상클래스가 할 수 없었던 다중 상속이 가능
// 자바의 버젼이 업그레이드 되면서, 인터페이스에도 override 의 강제성이 부여되지 않은 일반 변수메서드 선언이 가능
interface Inter1{
fun inter1Method1(){
println("Inter1의 inter1Method1입니다")
} // override 강제성이 부여되지 않은 메서드
fun inter1Method2() //override 강제성이 부여된 메서드
}
interface Inter2{
fun inter2Method1(){
println("Inter2의 inter2Method1입니다")
}
fun inter2_Method2()
}
// 인터페이스의 구현은 자식 클래스 이름 옆에 ":" 과 함께 ()괄호 없이 인터페이스의 이름만 기술
class TestClass51:Inter1{
override fun inter1_Method2() {
println("TestClass51의 오버라이딩 된 Method2 입니다")
}
}
class TestClass52 : Inter2{
override fun inter2_Method2() {
println("TestClass52의 오버라이딩 된 Method2 입니다")
}
}
// 두 개이상의 인터페이스를 구현하려면 인터페이스 이름들을 "," 로 구분하여 기술
class TestClass53 : Inter1, Inter2{
override fun inter1_Method2() {
println("testClass53의 inter1에서 오버라이딩 된 Method2 입니다")
}
override fun inter2_Method2() {
println("testClass53의 inter2에서 오버라이딩 된 Method2 입니다")
}
}