[Java] 상속(extends)

2020. 4. 21. 18:44Programming Languages/Java

※ 이 글은 공부한 내용을 정리하는 글입니다.

 

상속 : 평소 대화할 때 쓰이는 상속과 비슷한 맥락이다.

부모 클래스에 만들어진 필드와 메소드를 자식 클래스가 물려받는 것이 상속이다.

부모 클래스 - Super class 라고 불림.

자식 클래스 - Sub class 라고 불림.

상속의 장점

  1. 클래스의 간결화
    • 중복되는 코드들은 상속을 주고받음으로써 코드의 중복을 없애준다.
  2. 클래스 관리 용이
    • 클래스들을 계층적으로 분류할 수 있으므로 클래스 관리가 용이하다.
  3. 생산성 향상
    • 클래스를 재사용하기 쉽고 확장에 용이하다.

상속 선언

sub class 뒤에 extends super class 이름을 선언하면 된다.

public class Point { // ColorPoint에 상속을 주는 super class

}
class ColorPoint extends Point { // Point를 상속받는 sub class 선언

}

상속과 객체

class Point {
	private int x, int y // 한 점을 나타내는 x,y 좌표
    public void set(int x, int y) {
    	this.x = x; this.y = y;
    }
    public void showPoint() {
    	System.out.println("(" + x + "," + y + ")");
    }
}

class ColorPoint extends Point {
	private String color; // 점의 색깔
    
    public void setColor(String color) {
    	this.color = color;
    }

	public void showColorPoint() {
    	System.out.print(color);
        showPoint(); 
    }
}

public class ColorPointEx {
	public static void main(String[] args) {
		Point p = new Point();
		p.set(1,2); // Point 클래스의 set() 호출
		p.showPoint();

		ColorPoint cp = new ColorPoint();
		cp.set(3,4); // Point 클래스의 set() 호출
		cp.setColor("red"); // ColorPoint 클래스의 setColor() 호출
		cp.showColorPoint(); // 색깔과 좌표 출력
    }
}

(들여쓰기가 이상하게 되네요 ㅜ)

 

위에서 생성한 객체 p와 cp는 서로 다른 객체이다. p는 Point 클래스의 멤버만 가지고, cp는 Point 클래스와 ColorPoint 클래스의 멤버를 모두 가진다. 그리고 cp객체는 Point 클래스의 public 지정자인 set()과 showPoint(), ColorPoint 클래스의 setColor()와 showColorPoint에는 접근할 수 있지만 private 지정자인 x, y, color에는 접근하지 못한다. 

> 서브 클래스는 슈퍼 클래스의(같은 패키지 내의) private 멤버를 제외하고는 모든 멤버에 접근할 수 있다.

 

자바 상속의 특징

  • 자바에서는 클래스의 다중 상속을 지원하지 않는다.
    • 한 클래스가 여러 개 상속받는 다중 상속을 지원하지 않는다.
  • 자바에서는 상속의 횟수에 제한을 두지 않는다.
  • 자바에서 계층 구조의 최상위에 java.lang.Object 클래스가 있다.
    • 사용자가 만들든 자바패키지에서 제공하든, 자바에서 모든 클래스는 Object 클래스를 자동 상속받도록 컴파일되어있다. 따로 선언하지 않아도 자동으로 된다. Object 클래스는 슈퍼 클래스를 가지지 않는 최상위 클래스이다.

'Programming Languages > Java' 카테고리의 다른 글

[Java] 상속과 생성자  (0) 2020.04.21
[Java] 상속과 접근 지정자  (0) 2020.04.21
[Java] final 키워드  (0) 2020.04.18
[Java] static 키워드  (0) 2020.04.18
[Java] 접근 지정자  (0) 2020.04.18