7.클래스 - (4) 상속(inheritance)

한승록·2023년 4월 26일
0

자바 기초

목록 보기
14/21
post-thumbnail

1)상속의 개념

'상속(inheritance)'은 ①재사용성과 ②검증시간의 단축, ③유지보수의 효율성 등의 장점을 내포한 기능입니다.
class Pos2D {				// 슈퍼클래스 (부모클래스, 상위클래스)
	private int x, y;
	
	public Pos2D(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public void show() {
		System.out.println("x : " + x + "y : " + y);
	}
	public int getX() {
		return x;
	}
	public int getY() {
		return y;
	}
}

class Pos3D extends Pos2D{	// Pos2D의 내용을 상속받아서, 추가속성과 기능을 작성한 새로운 클래스
							// 서브 클래스 (자식클래스, 하위클래스)
	private int z;
	
	public Pos3D(int x, int y, int z) {	// 서브클래스는 슈퍼클래스의 생성자를 반드시 호출해야만 한다.
//		this.x = x;
//		this.y = y;
		super(x, y);	// Pos2D(int x, int y)	// 생성자의 첫번째 줄에서 호출
		this.z = z;
	}
	
	@Override			// 물려받은 기능(함수)의 형식은 유지하면서, 내용을 새로 작성한다
    					// -> 주석 및 문법 체크 역할(어노테이션)
	public void show() {
		System.out.printf("x : %d, y : %d, z : %d\n", getX(), getY(), z);
	}
	public int getZ() {
		return z;
	}
}
코드를 보시게 되면 먼저 'Pos2D' 라는 '슈퍼 클래스'(흔히 부모클래스라고 부릅니다) 가 작성됩니다.

그리고 이후에 작성된 'Pos3D'에 extends를 통해 상속을 시켜주면 'Pos3D'는 '서브 클래스'(흔히 자식클래스라고 부릅니다)의 속성을 가지게 됩니다.

그렇다면 상속이 이루어지면 어떤 결과값이 나오게 될까요?

위의 코드에서 보자면 'Pos3D' 에서 선언되지 않더라도 'Pos3D'객체인 ob2에서 'Pos2D' 에서 선언된 int x, int y'필드 변수'를 사용할 수 있는 것을 확인하실 수 있을 겁니다.

<※ 결과는 다음과 같습니다.>

또한 show() 메서드 같은 '메서드'를 사용할 수 있는 데 이때, 부모 클래스에서 만들어진 그대로의 메서드도 사용 가능하지만 '오버라이딩' 이라는 것을 활용하여 메서드의 내용을 변화시킬 수도 있습니다. (오버라이딩에 대해서는 뒤에서 다시 설명드리겠습니다.)


슈퍼 클래스부모 클래스를 작성방법을 알려드렸다면 이제는 사용 방식에 대해 말해볼까 합니다.

클래스객체를 생성하여 사용됩니다. 이는 상속받은 클래스의 내부 메서드에서도 적용됩니다.
이때 객체생성시 주의할 점이 있습니다.
  1. 서브클래스의 생성자는 슈퍼클래스의 생성자를 반드시 호출
  2. 생성자를 직접 작성하지 않으면, 기본 생성자를 자동 생성
  3. 매개변수를 받는 생성자를 작성하면 기본생성자가 사라짐
  4. 슈퍼클래스의 생성자 모양에 맞게 서브 클래스에서 직접 호출하도록 설정
(다음과 같이 super(부모 클래스 필드 변수)와 같이 생성자를 호출해주는 것을 유념하셔야 됩니다.)




2) 오버라이딩

오버라이딩은 위에서 언급하였듯이 상속받은 메서드의 내용을 재정의하여 사용하는 방식을 의미합니다.
이때 앞선 코드에서 보시다시피 해당 메서드 위에 @Override라는 구문을 보실수 있으실 겁니다.

해당 구문은 어노테이션이라는 것으로 주석과 문법 확인의 역할을 동시에 수행하게 됩니다.

이를 통해 오버라이딩된 메서드는 부모 클래스의 메서드를 그대로 사용하여도 되지만 속성의 변화를 통하여 자신의 구문에 맞게 변경할 수도 있습니다.

profile
개발 학습

0개의 댓글