본문 바로가기
JAVA

java 객체 지향의 상속이란? 특징/사용법/예제

by 자바비터 2022. 3. 15.

▶ 객체 지향의 상속이란?

: 부모 클래스에 만들어진 필드, 메소드를 자식클래스가 물려받아 사용할 수 있다.

   

   

▶ 상속의 특징

1. 상속 받은 클래스는 상속해준 클래스의 메소드 및 변수를 활용 할 수 있다.

2. 상속을 통해 간결한 자식 클래스를 작성할 수 있다.

→ 동일한 특성을 재정의할 필요가 없기 때문에 자식 클래스가 간결해짐.

3. 상속 받은 메소드의 경우 이름만 갖다 쓰고 내용은 변경할 수 있다.(오버라이딩, 다형성)

4. 자바는 하나의 클래스가 하나의 클래스만 상속 받을 수 있다.(다중상속 불가)

→ 단, 상속을 해주는 것은 몇 번이고 가능하다.

5. fianl 클래스는 상속 불가하다. (final 메소드는 오버라이딩 불가)

   

  

▶ 상속 사용 방법

- 상속시에는 extends 키워드를 사용한다.

[자식클래스명 extends 부모클래스명]

- 부모클래스 → 슈퍼클래스 / 자식클래스 → 서브클래스라고 부른다.

- super 키워드는 슈퍼클래스의 멤버를 접근할 때 사용되는 레퍼런스이다.

→ super는 서브 클래스에서만 사용할 수 있고 슈퍼 클래스의 메소드를 호출할 수 있다.

→ 컴파일러는 super의 접근 정적 바인딩으로 처리한다.

   

  

Q1. 그렇다면 서브 클래스 객체가 생성될 때 서브 클래스의 생성자와 슈퍼 클래스의 생성자가 모두 실행되는가?

A) 둘 다 실행 된다.

→ 서브클래스의 객체가 생성되면 이 객체 속에 서브 클래스의 멤버, 슈퍼클래스의 멤버가 모두 들어있다.

생성자의 목적은 객체 초기와에 있으므로, 서브 클래스의 생성자는 생성된 객체 속에 들어있는 서브 클래스의 멤버 초기화나 필요한 초기화를 수생하고, 슈퍼 클래스의 생성자는 생성된 객체 속에 있는 슈퍼클래스의 멤버 초기화와 필용한 초기화를 각각 수행한다.

    

Q2. 서브 클래스의 생성자와 슈퍼 클래스의 생성자 중 누가 먼저 실행되는가?

A) 슈퍼클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다.

     

정리하자면 new에 의해 서브 클래스의 객체가 생생 될 때 슈퍼클래스 생성자와 서브클래스 생성자 모두 실행되며 슈퍼클래스의 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다.

이 부분은 상속을 다룰 때 중요한 개념이다.

 

 

▶ 상속 예제

부모클래스
public class Ex01Point { //부모클래스
	private int x, y;
	
	public void set(int x, int y) { //set 메소드로 좌표 정보 받아들임
		this.x = x;
		this.y = y;
		
	}
	public void showPoint() { //입력받은 데이터 출력
		System.out.println("부모클래스 메소드 출력 : (" + x + "," + y + ")");
	}
}

 

자식클래스
public class Ex01ColorPoint extends Ex01Point { //자식클래스
	//자식 클래스, 클래스 상속
	//extends를 사용하여 Ex01Point를 상속받음
	
	private String color;
	//위의 color 변수의 타입이 private이므로
	//setter메소드로 데이터 입력받음
	public void setColor(String color) {
		this.color = color;
	}
    
	public void showColorPoint() {
		System.out.println("자식클래스 메소드 : " + color);

		super.showPoint();
        	//super. 은 상속 받은 메소드를 활용한다는 표현임
		//super 생략 가능
		//이 메소드는 부모클래스인 Ex01Point.java에 존재하는 메소드
		//해당 객체에서 Ex01Point.java에 직접 x, y 값을 대입하지는 않지만
		//x, y 역시 상속 받아 사용하므로 아예 x, y 변수를 선언 했다고 봐도 됨.
	}
}

 

상속 클래스 객체 활용
public class Ex01 {
	public static void main(String[] args) {
		// 부모클래스 객체 생성
		Ex01Point p = new Ex01Point();
		
		p.set(1, 2); //set 메소드를 활용해 데이터 입력
		p.showPoint(); //입력된 데이터를 출력
		
		// 자식클래스 객체 생성
		Ex01ColorPoint cp = new Ex01ColorPoint();
		//이 객체는 Point 클래스의 자식 클래스이므로
		//메소드나 변수를 그대로 활용할 수 있음
		//부모클래스에 선언되어 있으면 굳이 자식 클래스에서 선언한 필요가 없음(상속성)
		cp.set(3, 4);
		cp.setColor("red");
		cp.showColorPoint();
		//Ex01ColorPoint 클래스에는 set 메소드가 없지만
		//부모클래스인 Ex01Point에는 있으므로 상속받아 사용 가능
	}
}

상속 객체 예제 결과 화면

 

결과 화면에 보이는 것과 같이 자식 객체 cp를 사용하여 부모클래스의 메소드인 set을 사용하였고,

자식 메소드인 showColorPoint()를 사용하여 부모클래스의 showPoint() 메소드를 출력하였다.

이렇게 동일한 특성을 재정의할 필요 없이 상속받아 쓸 수 있다.

 

 

댓글