Everyday Dev System

0524_TIL : 인터페이스 자동 형 변환 본문

내배캠 주요 학습/TIL : Today I Learned

0524_TIL : 인터페이스 자동 형 변환

chaeyoung- 2023. 5. 24. 14:31

# 문제점 : 아직 객체지향에 대해서 지식이 턱없이 부족함을 느꼈다.

 

# 시도 : 새롭게 알게되거나 헷갈리는 부분들의 코드를 직접 쳐보면서 다시 학습했다.

그리고 TIL에도 작성하며 다시 한번 정리하며 공부를 했다.

 

 

# 새롭게 알게된 점:

 

1. 인터페이스 자동, 강제 형변환 관련

interface A {
    void a();
}
class B implements A {
    @Override
    public void a() {
        System.out.println("B.a()");
    }

    public void b() {
        System.out.println("B.b()");
    }
}

B클래스는 A interface를 implements하여 a 메서드를 오버라이딩한 클래스이다

 

        // A 인터페이스에 구현체 B 대입
        A a1 = new B();
        a1.a();
        // a1.b(); // 불가능

a1은 A interface로 자동 형 변환이 이루어졌기 때문에 A interface에 없는 b() 메서드는 사용이 불가하다.

 

        B b = (B) a1;
        b.a();
        b.b(); // 강제 타입변환으로 사용 가능

B 클래스 타입으로 강제 타입 변환을 하고 난 후에는 b() 메서드 활용이 가능하다.

 

interface A {
    void a();
}
class B implements A {
    @Override
    public void a() {
        System.out.println("B.a()");
    }

    public void b() {
        System.out.println("B.b()");
    }
}
class C extends B {
    public void c() {
        System.out.println("C.c()");
    }
}

 

        // A 인터페이스에 구편체 B를 상속받은 C 대입
        A a2 = new C();
        a2.a();
        //a2.b(); // 불가능
        //a2.c(); // 불가능

        System.out.println("\nC 강제 타입변환");
        C c = (C) a2;
        c.a();
        c.b(); // 강제 타입변환으로 사용 가능
        c.c(); // 강제 타입변환으로 사용 가능

B 클래스를 상속받은 C 클래스 타입을 A interface 타입으로 자동 형변환 시도.

A 타입이므로 b() , c()메서드를 사용 불가

C 타입으로 강제 형변환 시에는 사용 가능