이전 학습 내용

Java 생성자와 인터페이스 질문!

SigLee0505 2022. 11. 12. 17:07

Java 생성자와 인터페이스 / 다형성에 대해 공부를 하던 중 재밌는 생각이 났다.

클래스명을 열심히 만들어야하지만 내 궁금증을 해결하기 위한 간단한 코드기 때문에 국룰로 지켜야하는 것들을 생략하고 만들어보겠다.

 

내가 만들 클래스는 총 3개 각각 a / aa /aaa 이다.

또한 내가 만든 인터페이스는 b 하나고 이것은 aaa클래스에서만 구현 시킬 것이다.

public class a {

    int a;
    int b;

    public a(int a, int b) {
        this.a = a;
        this.b = b;
    }
}

public class aa extends a{

    int c;

    public aa(int a, int b, int c) {
        super(a, b);
        this.c = c;
    }
}
public class aaa extends aa  implements b{
    int d;


    public aaa(int a, int b, int c, int d) {
        super(a, b, c);
        this.d = d;
    }
}

public class main {
    public static void main(String[] args) {
        a a = new aaa(1,1,1,1);         // 궁금증 1 상황 바로 해결!


      System.out.println(a.d);			//이건 복습의 의미로 테스트한 것 컴파일 X
        b d = a;                        //궁금증 2 상황 >> 컴파일 X
        b d = (aaa) a;                      //내가 했던 가능했던 이유
    }


}

이때의 궁금증

1. 상속에상속에상속을 할 경우 최상위 클래스의 값도 입력을 해줘야하는가?

궁금했던 이유!

문든 과연? 이라는 당연히 되겠지 라는생각만 했지만 실제로는?? 이라는 생각이었다.

 

2. aaa에만 인터페이스 b를 구현 시키고 a형 변수에 aaa 인스턴스 참조값을 저장했을 때        a형 변수를 b형 변수로 변경이 가능한가??

프로그램 설계 중

모든 상품을 관리하는 대분류 카테고리 아래 소분류 카테고리를 만드는 방식으로 제작하려고 하는데

소분류 카테고리를 클래스로 만들기에는 소분류 카테고리만의 메서드나 변수 등이 필요없어서

이럴꺼면 인터페이스로 만들면 좋지않을까? 라는 생각을 하며 궁금해졌다.

초보 개발자였던 나는 처음 했던 생각은

당연히 가능하겠지 !! 어차피 형변환 해서 aaa 로 바꾸고 그다음에 인터페이스 형으로 변환해주면되자나!!

라는 생각을 했다.

결론부터 말을 하자면 절대 불가능하다. 

애초에 a라는 클래스는 b라는 인터페이스의 존재도 알지 못한다. 그렇기 때문에 불가능하다.

 

궁금증 1의 해결

a a = new aaa(1,1,1,1);

아래의 aaa 클래스의 인스턴스 생성 시 입력값을 보면 자신이 상속하고 있는 모든 클래스의 생성자에 필요한 것들을 입력받고 있다.

궁금증 2의 해결

        b d = a;                       
        b d = (aaa) a;

이 코드는 위에 있는 코드 중 처음에는 자동으로 형변환을 해줄것이라 생각했던 것이다.

....결과는 당연히 실패!

아래는 내가 자동으로 이루어질 것이라고 생각했던 형변환이다. 

2번째는 물론 가능하다. 

 

아직 개발자의 감수성이 부족한것 같다.

 

개발자가 되기 위해 열심히 달려가려고한다.

모든 개발자를 준비하시는 분들 / 현직 개발자 분들 / 기타등등의 사람들 모두화이팅입니다!!!

 

 

 

'이전 학습 내용' 카테고리의 다른 글

Iterator 사용 시 주의 사항(toNext())  (0) 2022.11.17
java  (0) 2022.11.17
java 02  (0) 2022.11.17
코드스테이츠 섹션 1 완료 회고  (0) 2022.11.16
문제를 풀었다.  (0) 2022.11.04