1. 개념
자바에는 상속이라는 개념이 있다.
A extends B 라고 표현하며, A가 B를 상속한다. 라는 의미이다.
일상생활의 상속과 비슷한 의미로 이해하면 편하며, 그렇기 때문에 B에서 생성된 변수나 메소드를 똑같이 사용 가능하나 역으로 A에서만 생성된 변수 & 메소드를 B에서 사용하는 것은 불가능하다.
extend의 영사전적 의미는 확대하다. 넓히다. 의 의미로서. 이 의미를 생각하고 공부하면 이해하기가 쉽다.
A를 자식 클래스, B를 부모 클래스라고 할 때, 부모가 가지고 있는걸 자식이 사용하면서 자식이 개인적인 물품을 사용하는 방식이라 이해하면 된다.
B에서 쓰는 변수와 메소드는 A에서 상속받아 사용이 가능하며, 또한 A에서 추가로 변수와 메소드의 생성이 가능하다.
위 사진에서 Employee 클래스를 Manager클래스에서 상속받았다. Employee에 있는 메소드들과 변수들은 Manager에서 사용이 가능하나. Manager에서 만든 Comm관련 변수와 메소드는 Employee 에서 사용이 불가능하다. Employee 클래스가 부모 클래스이기 때문이다.
2. 형변환
위 사진에서 볼 수 있듯이 부모클래스를 자식 클래스로 형변환이 가능하다. 역으로 자식클래스를 부모클래스를 형변환 할 시에는 오류가 생길 위험이 다분한데, 생각해보면 당연한 것이 부모에는 없는 메소드나 변수가 자식에는 있기 때문에 해당 기능과 변수들에 대한 정보가 없기 때문이다.
자식 -> 부모형으로 형변환 하는 것을 Up-Casting 이라고 하고 부모 -> 자식으로 형변환 하는 것을 Down-Casting 이라고 한다.
Up-Casting 은 100% 가능하나 Down-Casting 은 상황에 따라 되기도 하고 안되기도 한다. 또한 Down-Casting 은 묵시적 형변환이 되지 않기 때문에 명시적으로 행해야 한다.
그러나 Down-Casting 했을 경우에 자식 클래스에서 생성된 변수나 메소드가 사라지는 것이 아니라 잠시 비활성화[Hidden]될 뿐이기 때문에, 그를 또다시 Up-Casting 하게 되면 원래대로 기능이 활성화되어 사용이 가능해진다.
mgr = (Manager)emp;
System.out.println(mgr.getComm()); //
본래 emp 는 mgr이었기 때문에, 숨겨졌던 기능들이 활성화 되면서 기능이 돌아가기 때문에 해당 부분은 맞는 코드이나,
mgr = (Manager)new Employee();
System.out.println(mgr.getComm()); // ERROR
이 부분에서는 mgr에 새로운 employee를 설정했기 때문에 기능이 없어 에러가 난다.
이를 이용하여 하나의 배열에 다양한 형태의 데이터 저장이 가능해진다. 매우 유용한 방법이니 참고해도 좋다.
'Programming > Java' 카테고리의 다른 글
override & overload [오버라이딩 & 오버로딩] (1) | 2016.01.20 |
---|---|
상속 - 2 (0) | 2016.01.20 |
JAVA Static 변수 생성 주기 (0) | 2016.01.15 |
JAVA Static 변수 (0) | 2016.01.15 |
JAVA Gabage Collecter [JVM GC] (0) | 2016.01.15 |