[Java] 상속(Inheritance)
2022. 10. 5. 14:43ㆍDev.Program/Java & Spring
728x90
======== Ex.java 만들기
p.218
< 상속(Inheritance) >
- is-a 관계가 성립하는 객체간의 관계
- 슈퍼클래스의 모든 멤버를 서브클래스에서 물려받아 선언없이 사용하는 것
- 슈퍼클래스(Super Class) = 부모 클래스 = 상위 클래스 = 조상 클래스
- 서브클래스(Sub Class) = 자식 클래스 = 하위 클래스 = 자손 클래스
- 생성자 및 private 접근 지정자가 선언된 멤버는 상속 대상에서 제외됨
- 자바는 단일 상속만 지원함
- 별도로 상속 대상을 지정하지 않을 경우 Object 클래스를 자동으로 상속받는다.
- ⇒ java.lang.Object 클래스는 모든 클래스의 최상위 클래스라고 한다.
< 상속 기본 문법 >
class 서브클래스명 extends 슈퍼클래스명 {}
< Ex.java >
- 소유주 보여줌 (- Parent / - Child)
class Child extends Parent {
public void childPrn() {
System.out.println("서브클래스의 childPrn()");
}
}
- 부모가 자식보다 상위개념이지만 자식은 (상속 + a)값을 가지므로 가지고 있는 건 자식이 더 많다. 그래서 extends(확장)라고 씀.
- 부모는 자식클래스를 가져오지 못함.
- 그러므로 오류!
- 상속에 상속( 할아버지 - 아버지 - 나 )
- me 는 아버지클래스, 할아버지클래스 다 부를 수 있다!
======== Test.java 만들고 JAVA200211 → test.java에 account 클래스 복붙해오기
======== Ex2.java 만들기
< 상속에서의 생성자 >
- 생성자는 상속되지 않는다.
- 인스턴스 생성 시, 서브클래스의 인스턴스 생성 전에 슈퍼클래스의 인스턴스를 먼저 생성한 후 서브클래스의 인스턴스를 생성한다.
ex ) Employee 클래스 ← Manager 클래스 정의
- new Manager() 코드 실행되어 Manager() 생성자로 이동
- 슈퍼클래스인 Employee 의 Employee() 생성자 호출하여 이동
- Employee 의 슈퍼클래스인 Object 클래스의 생성자 호출하여 이동
- Object 인스턴스 생성되고, 생성자 내의 코드 실행
- Employee 인스턴스 생성되고, 생성자 내의 코드 실행
- Manager 인스턴스 생성되고, 생성자 내의 코드 실행
< Ex2.java >
- 자신의 클래스 내에서 슈퍼클래스의 멤버에 자유롭게 접근 가능
- 생성자는 상속이 안된다! (빈 생성자는 manager 에 없음)
- 호출 창 잘 보기
- 부모 코드 먼저 실행 후 내려옴 (Employee() 생성자 호출됨!)
- new Manager() 코드 실행되어 Manager() 생성자로 이동
- 슈퍼클래스인 Employee 의 Employee() 생성자 호출하여 이동
- Employee 의 슈퍼클래스인 Object 클래스의 생성자 호출하여 이동
- Object 인스턴스 생성되고, 생성자 내의 코드 실행
- Employee 인스턴스 생성되고, 생성자 내의 코드 실행
- Manager 인스턴스 생성되고, 생성자 내의 코드 실행
======== Ex3.java 만들기
교재 243p
< 접근 제한자에 따른 접근 범위 차이 >
public int publicVar; ⇒ 모든 패키지의 모든 클래스에서 접근 가능(= 누구나 접근 가능)
protected int protectedVar; ⇒ 같은 패키지 or 패키지 달라도 상속 관계이면 접근 가능
(default) int defaultVar; ⇒ 같은 패키지 내에서 접근 가능
private int privateVar; ⇒ 자신의 클래스에서만 접근 가능(=다른 클래스에서 접근불가)
☆ 접근 제어자의 적용 가능 범위
구분 | 같은 클래스 | 같은 패키지 | *다른 패키지*의 자손 클래스 | 전체 |
public(누구나 접근) | O | O | O | O |
protected → 특이한 애! | O | O | O | |
default(=package) | O | O | ||
private | O |
⇒ ** 패키지가 달라도 부모자식관계(상속)면 접근 가능
- p.244 [그림 7.17] 상속 관계에서 접근 제어자의 사용
- p.privateVar = 10; ⇒ 오류! private는 다른 클래스에서 접근 불가
- p1 & p2 package 만들기
- OtherPackageChildClass
- OtherPackageSomeClass
교재 225p
728x90
'Dev.Program > Java & Spring' 카테고리의 다른 글
[Java] 형변환(Type Casting) - 업캐스팅/다운캐스팅 (0) | 2022.10.05 |
---|---|
[Java] 메서드 오버라이딩(Overriding) (1) | 2022.10.05 |
[Java] 패키지(package) / import (0) | 2021.01.23 |
[Java] 생성자(Constructor) (0) | 2021.01.23 |
[Java] 오버로딩 / 가변인자 (0) | 2021.01.23 |