본문 바로가기
Study/중앙정보처리학원과정

12일차. 상속...상속....속상.....

by 얏옹이 2022. 11. 9.
반응형

 

12일차가 밝았다.

 

드디어 상속... 상속.... 욕만나오는 상속.... 개인적으로 상속과 다형성이 제일 복잡한거같고 이해도 잘 안가는거같다.

 

하필이면 Java중에 제일 약하다고 할수있는 상속과 다형성할때 강사님이 부재시라니.....

 

그래도 열심히 정리해보자...

 

상속이란? Inheritance 라고 한다.

 

우리가 익히 알고있는 상속과 같은 개념으로 생각하면 될거같다. 부모가 자식에게 상속으로 이것저것 물려주듯이.

 

Java에서 상속은 상속 받은 클래스를 SubClass(하위클래스, 자식클래스) 라고 부르고

 

상속을 해주는 클래스를 SuperClass(부모클래스, 상위클래스)라고 부른다.

 

 

상속의 문법은 Class A extends B {

 

} 로 적는다. B라는 Class를 상속받는 A클래스라고 이해하면 될거같고, 클래스명중에 뒤에오는 클래스가 상속의 대상, 즉 상속 해주는 부모 클래스이며 앞에 오는 A가 상속을 받는 자식클래스이다.

 

그럼 상속해줄때 무엇을 해주느냐?

 

부모클래스의 "멤버" 를 상속해준다, 여기서 멤버는 Fieid와 Method를 상속해주고 안타깝지만 생성자는 상속해주지 않는다.

 

그리고 기타적으로 부모클래스에서 Private 접근제한자 선언된 Fieid와 Method, Final 제어자 선언된 Field와 Method

들도 상속받지 못한다.

 

즉...같은 패키지 내라면 Proteced, Public, defalut Field와 Method는 다 상속해준다고 보면 되고

 

만약 다른패키지라면 defalut 선언된 필드와 메소드도 상속받지 못하기때문에 패키지가 다를경우에는 상속관계에 있는 자식클래스에게 물려주기위해서 defalut를 Protected로 변경해줘야 상속 가능하다.

 

상속은 여러 클래스를 한꺼번에 상속받지 못한다. 한번에 한 클래스만 상속이 가능하다.

 

A,B,C 라는 3가지의 클래스가 있고, C가 자식클래스라면 A,B 동시에 상속받지 못한다.

 

단 B를 A가 상속받고, 그 상속받은 클래스를 다시 C가 상속을 받을수는 있다. 이렇게 되면 자식 - 부모 - 조상 클래스 순으로 대가족(?) 이 형성될수는 있다.

 

코드로 알아보자.

 

 

조상클래스 GrandMother 클래스를 상속받는 부모클래스 Mother, 그리고 이 클래스를 다시 상속받는 자손클래스 Son이 있다.

 

x,y 필드는 조상클래스에 존재하고, z는 부모클래스에 존재한다.

 

Son이 조상클래스, 부모클래스의 멤버들을 다 상속 받았으니. 메인클래스를 별도로 만들어줘서

 

자손클래스인 Son클래스에 대해 객체를 생성해주고 각각 잘 출력이 되는지 살펴보았다.

 

 

객체 생성은 자손클래스 하나만 하였지만 각각 값에 Getter Setter를 이용하여 값 접근도 가능하고 수정도 가능하다.

 

 

자! 그리고 여기서 마지막 중요한건 바로.. Main Method 맨 마지막줄에 있는 Son.call(); 이라는 메소드이다.

 

위에 코드를 보면 부모클래스 란에 void call로 선언된 메소드가 있고. 자손 클래스에도 동일한 네이밍으로 선언된 메소드가 있다.

 

그렇다면 상속할때 Field와 Method 다 상속받는다고 앞서 말했는데... 이건 어찌된일일까? 오류라도 나야하는거 아닌가?

 

하위클래스에서 Method 를 Override 했기때문이다.

 

상속을 선언하면서 Method도 물려받은것은 맞다. 하지만 @Override 선언해주면서 상속받은 Method는 하위클래스에서

 

하위클래스에 맞게 편집이 가능하다. 이것이 메소드 재정의 즉 오버라이드, Override 이다.

 

그래서 동일명의 Method지만 마지막에 오버라이드 된 자손클래스의 call() 메소드에있는 문구가 출력된것이다.

 

반응형