상속 클래스의 구성
- 할아버지 : Animal
- 아버지 : Mammal
- 나 : Pet
우리가 일반적으로 사용할때 타입과 생성을 동일하게 사용했었다.
Mammal ma1 = new Mammal(); //순수 Mammal 타입
Pet pe1 = new Pet(); //순수 pet 타입
다형성 법칙
1. 후손은 조상의 타입이 될 수 있다 = 상속관계는 같은 타입이 될 수 있다.
2. 조상은 후손의 타입이 될 수 없다.
타입 변수 = 생성 기본생성자 ;
Animal a0 = new Animal(); → Animal 에 정의된것 만큼 접근 가능
Animal a1 = new Pet(); → Animal 에 정의된것 만큼 접근 가능
타입으로 정의된 만큼 멤버들에게 접근이 가능함을 알 수 있다.
정의된 멤버는 코드의 우측 만큼 접근이 된다.
즉 , 쉽게 말해 aninal 에 정의된 변수를 사용할 수 있는데 그 변수를 사용하면 생성한 인스턴스의 변수로 사용하게 된다.
자바의 다형성이란 왼쪽의 타입이 그대로 이기 때문에 우측의 대입이 다양해질 수있다는 것이다.
- 비교구문
Mammal ma1 = new Mammal(); //순수 Mammal 타입
Animal a2 = new Mammal();
a2 와 ma1은 접근 가능 멤버의 범위가 다르다.
하위의 타입으로 상위의 인스턴스를 담는것이 불가하다.
하위의 멤버들이 상위의 인스턴스에 없는 멤버들을 사용하게 된다면 그 자체가 불가지 않을까 ?
Mammal ma1 = new Mammal();
Animal a2 = new Mammal();
Mammal ma1 = a2;
컴파일 오류가 발생하게 된다 . ma2가 아빠타입이고 a2는 할아버지 타입이기 때문에 , 타입 미스매치가 뜨게 된다.
하지만 생성은 똑같이 아빠인스턴스으로 생성하였다.
이 부분을 타입캐스팅을 통해 대입이 가능하다.
Mammal ma1 = new Mammal(); //순수 Mammal 타입
Animal a2 = new Mammal();
ma1 = (Mammal)a2;
mammal로 인스턴스로 만들어 놓은것을 animal의 타입은 mammal 타입으로 변경가능하다.
인스턴스의 계보와 클래스가 맞아야 형변환이 가능한데 , 다른인스턴스로 만들어 놓은것은 런타임시 오류가 발생한다.
Mammal ma1 = new Mammal(); //순수 Mammal 타입
Animal a0 = new Animal();
ma1 = (Mammal)a0; // 런타임 오류
즉 , 같은 계보의 인스턴스 참조는 형변환이 가능한 것을 볼 수 있다.
단 , 형제관계에서는 되지 않고 상위 하위로의 개념으로만 가능하다.
종단 클래스 (=단종 클래스)
Final의 적용
1. 클래스에 Final 을 적용할 경우 상속이 불가능하다.
(대표적인 클래스로는 String 클래스가 있다.)
2. 메서드에 Final을 적용할 경우 오버라이딩이 불가능 하다.
조상이 Final 메서드를 적용할 경우 후손에 오버라이딩이 된 메서드들이 오류가 나는 것을 볼 수 있다.
'Developer > JAVA' 카테고리의 다른 글
JAVA , 추상 클래스의 다형성 보기 (1) | 2024.08.08 |
---|---|
JAVA , 추상 클래스 (0) | 2024.08.08 |
JAVA , 상속관계 is-a (0) | 2024.08.06 |
JAVA , 클래스간의 관계 : use , has, is (0) | 2024.08.06 |
JAVA , 예제 : 로또 번호 생성기 , 학생 성적순 출력 (0) | 2024.08.06 |