[Java] 상속(Inheritance)

2022. 10. 5. 14:43Dev.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 클래스 정의

  1. new Manager() 코드 실행되어 Manager() 생성자로 이동
  2. 슈퍼클래스인 Employee 의 Employee() 생성자 호출하여 이동
  3. Employee 의 슈퍼클래스인 Object 클래스의 생성자 호출하여 이동
  4. Object 인스턴스 생성되고, 생성자 내의 코드 실행
  5. Employee 인스턴스 생성되고, 생성자 내의 코드 실행
  6. Manager 인스턴스 생성되고, 생성자 내의 코드 실행

 

< Ex2.java >

  • 자신의 클래스 내에서 슈퍼클래스의 멤버에 자유롭게 접근 가능

 

  • 생성자는 상속이 안된다! (빈 생성자는 manager 에 없음)

 

- 호출 창 잘 보기

  • 부모 코드 먼저 실행 후 내려옴 (Employee() 생성자 호출됨!)
  1. new Manager() 코드 실행되어 Manager() 생성자로 이동
  2. 슈퍼클래스인 Employee 의 Employee() 생성자 호출하여 이동
  3. Employee 의 슈퍼클래스인 Object 클래스의 생성자 호출하여 이동
  4. Object 인스턴스 생성되고, 생성자 내의 코드 실행
  5. Employee 인스턴스 생성되고, 생성자 내의 코드 실행
  6. 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