본문 바로가기

Programming/Java

상속


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