개주 훈련일지/📚 코살대 교본 학습

상속

lshfood2 2025. 11. 8. 22:47

자바에서 부모 역할을 하는 클래스가

자식 역할을 하는 클래스에서

 

클래스 멤버와 클래스 메서드를

물려주는 것을 상속이라고 한다.

 

상속은 클래스를 재사용하는 것이므로

중복을 줄여주고 수정을 최소화할 수 있다.

 

[상속]

자식 클래스를 선언할 때, extends라는

키워드를 사용해 상속받을 클래스를 지명하며

자식 클래스에서 선택받은 클래스는

부모 클래스 역할을 하게 된다.

class A{
//부모클래스
}

class B extends A{
//extends로 상속
//자식클래스
}

[super()]

상속에서의 생성자, 즉 상속 관계에서

부모 클래스의 생성자와 자식 클래스의

생성자는 어떻게 사용해야 할까?

 

자식 클래스는 기본적으로

기본 생성자가 super()라는

메서드를 가지고 있다.

 

this()가 같은 클래스의 다른 생성자를

호출할 때 사용된다면, super()는

부모 클래스의 생성자를 호출할 때 사용된다.

 

B(){
super();
//A() 기본 생성자 호출
}

 

만약 부모 클래스의 생성자가 호출될 때

매개변수로 값을 전달받아 부모 클래스의

멤버변수들을 초기화 하도록 구현되어 있다면,

 

자식 클래스의 생성자에서 부모 클래스의 생성자를

호출할 때도 부모 클래스 대신 값을 매개변수로 받아

부모 생성자에 넣어줘야만 한다.

부모클래스(매개변수1, 매개변수2){
	this.필드1 = 매개변수1;
    this.필드2 = 매개변수2;
}

자식클래스(매개변수1, 매개변수2, 매개변수3){
	super(매개변수1, 매개변수2);
   	this.필드3 = 매개변수3;
}

[오버라이딩]

상속받은 메서드를 변경해서 다시 구현할 때

우리는 메서드 오버라이딩을 사용한다.

 

메서드 오버라이딩은 아래와 같은 제약 사항을 지켜야 한다.

- 부모 클래스의 메서드 이름/반환타입/매개변수와 동일해야 한다/

 (=메서드 시그니처가 같다)

- 부모 클래스의 메서드 보다 접근 제한을 줄일 수는 있으나

  접근 제한을 늘릴 수는 없다. (public -> private X)

public class Computer{
	void powerOn(){
    	System.out.println("컴퓨터 온")
    }
}

public class Samsong extends Computer{
//상속화된 자식클래스
	@Override
	void powerOn(){
	//같은 메서드지만 오버라이딩되어 다른 기능 구현
    	System.out.println("알럽 삼송")
    }
}

자식 클래스에서 오버라이딩된 메서드는

자식 객체를 통해 호출하면 자식 클래스에서

구현된 메서드가 실행되고,

 

부모 객체를 통해 호출하면 자식 클래스와는

상관없이 부모 클래스의 원래 메서드로 호출된다.

'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글

클래스 타입 변환  (0) 2025.11.10
소프트웨어 생명주기  (0) 2025.11.10
생성자  (0) 2025.11.06
메서드(method)  (0) 2025.11.05
소프트웨어 공학의 발전  (0) 2025.11.05