본문 바로가기
java/개념

상속

by unhyepnhj 2024. 5. 21.

객체 지향의 상속

- 부모 클래스의 멤버를 자식 클래스가 물려받는 것

- 부모 클래스의 멤버를 재정의할 필요 없음

- 코드 중복을 제거하여 프로그램이 간결

 

객체 지향에서 상속의 장점

  • 멤버 중복 작성 제거 → 클래스의 간결화
  • 클래스의 계층적 분류 → 클래스 관리 용이
  • 클래스 재사용과 확장 용이 → 새로운 클래스 작성 속도 증가 → 소프트웨어 생산성 향상

자바의 상속 선언

- 부모 클래스: 슈퍼 클래스(super class)

- 자식 클래스: 서브 클래스(sub class)

- extends 키워드 사용(슈퍼 클래스를 확장한다는 개념)

 

public class Person{
	...
}
public class Student extends Person{
	//Person(슈퍼 클래스)을 상속받는 Student(서브 클래스) 선언
    ...
}
public class StudentWorker extends Student{
	//Student(슈퍼 클래스)를 상속받는 StudentWorker(서브 클래스) 선언
    ...
}

- Student 클래스는 Person 클래스의 멤버를 물려받으므로 Person 클래스에 선언된 멤버를 다시 작성할 필요가 없음

- StudentWorker 클래스가 Student 클래스를 상속받으면 Person 클래스의 멤버도 자동 상속


상속과 객체

class Point{
	private int 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{			//Point를 상속받은 ColorPoint
	private String color;			//ColorPoint 멤버 추가 작성
	
	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);
		p.showPoint();
		
		ColorPoint cp=new ColorPoint();
		cp.set(3, 4);
		cp.setColor("red");
		cp.showColorPoint();
	}
}

 

상속 선언

class ColorPoint extends Point{
	...
}

- Point를 상속받는 ColorPoint 클래스의 상속 선언

 

서브 클래스 객체 생성

Point p = new Point();
ColorPoint cp = new ColorPoint();	//서브 클래스 객체 생성

- p와 cp는 별개의 객체

- p는 Point 클래스의 멤버만 가짐

- cp는 Point와 ColorPoint 클래스의 멤버를 모두 가짐

 

서브 클래스 객체 활용

Point와 ColorPoint 객체

- ColorPointEx 클래스의 main() 메소드에서는 cp 객체를 구성하는 ColorPoint 클래스의 public 멤버와 Point 클래스의 pubilc 멤버를 모두 접근 가능

- x, y, color 필드는 private 속성이므로 접근 불가

 

서브 클래스에서 슈퍼 클래스 멤버 접근

- x, y는 Point의 private 멤버이므로 set()과 showPoint()에게만 접근 허용, ColorPoint의 메소드는 접근 불가


자바 상속의 특징

 

1. 클래스의 다중 상속을 지원하지 않음

- 클래스 여러 개 상속 불가(class D extends A, B, C 불가능)

- extends 다음에는 클래스 이름을 하나만 지정 가능(class D extends A 가능)

 

2. 상속 횟수 무제한

 

3. 상속의 최상위 클래스는 java.lang.Object 클래스

- 자바 계층 구조의 최상위

- 모든 클래스는 자동으로 java.lang.Object를 상속받음

- 자바 컴파일러에 의해 자동으로


예제 5-1 (x, y)의 한 점을 표현하는 Point 클래스와 이를 상속받아 색을 가진 점을 표현하는 ColorPoint 클래스를 작성하고 활용

'java > 개념' 카테고리의 다른 글

상속과 생성자  (0) 2024.05.21
상속과 접근지정자  (0) 2024.05.21
final  (0) 2024.05.20
static  (0) 2024.05.20
접근 지정자  (0) 2024.05.20