본문 바로가기
JAVA

[자바] 상속의 기초 개념

by IT 정복가 2023. 8. 14.
728x90

상속

상속은 부모가 자식에게 물려주는 행위를 말한다. 객체 지향 프로그램에서도 부모 클래스의 필드와 메소드를 자식 클래스에게 물려 줄 수 있다.

 

상속을 사용하는 이유?

상속은 이미 잘 개발 된 클래스를 재사용해서 새로운 클래스를 만들기 때문에

중복되는 코드를 줄여 개발 시간을 단축시킨다.

예를 들어, 자식 클래스 B에서 처음부터 필드와 메소드 4개를 작성하는 것 보다는 필드1과 메소드1을 부모 클래스 A에서 상속 받고 필드2와 메소드2만 추가 작성하는 것이 보다 효율적이다.

 

상속의 이점

  1. 이미 개발된 클래스를 재사용하므로 중복 코드를 줄임
  2. 클래스 수정을 최소화함

클래스 상속

자식 클래스를 선언할 때 어떤 부모로부터 상속받은 것인지를 결정하고

부모 클래스를 다음과 같이 extends 뒤에 기술

※ 주의 ※ 

다중 상속은 허용하지 않음. extends 뒤에는 하나의 부모 클래스만 상속 가능!

부모생성자 호출

자식 객체를 생성하면 부모 객체가 먼저 생성된 다음에 자식 객체가 생성

 

그 이유는?

부모 생성자는 자식 생성자의 맨 첫 줄에 숨겨져 있는 super()에 의해 호출되기 때문에

예시)

class Phone{
	public String model;
	public String color;
	
	public Phone() {
		System.out.println("Phone() 생성자 호출!");
	}
}

class SmartPhone extends Phone{
	
	public SmartPhone(String model, String color) {
		//super(); 컴파일 시 자동 추가 
		this.model = model;
		this.color = color;
	}
}

public class SmartPhoneExample {

	public static void main(String[] args) {
		SmartPhone sp = new SmartPhone("갤럭시", "바이올렛");
		
		System.out.println("모델: "+sp.model);
		System.out.println("색상: "+sp.color);

	}

}

처리 순서)

메인 실행 > SmartPhone 객체 생성 시 SmartPhone 생성자 방문해 super() 실행 >

바로 Phone 생성자 방문해 코드 실행 > 다시 SmartPhone 생성자로 와서 나머지 코드 실행

> 메인 나머지 코드 실행

 

부모 클래스가 매개변수를 갖는 생성자가 있는 경우

class Phone{
	public String model;
	public String color;
	
	public Phone() {
		System.out.println("Phone() 생성자 호출!");
	}
	
	public Phone(String model, String color) {
		this.model = model;
		this.color = color;
		System.out.println(model+", "+color);
	}
}

class SmartPhone extends Phone{
	
	public SmartPhone(String model, String color) {
		super(model, color);  
		System.out.println("SmartPhone(String model, String color) 생성자가 실행됨");
	}
}

public class SmartPhoneExample {

	public static void main(String[] args) {
		SmartPhone sp = new SmartPhone("갤럭시", "바이올렛");
		
		System.out.println("모델: "+sp.model);
		System.out.println("색상: "+sp.color);

	}

}

Phone 클래스에 기본 생성자와 매개변수 2개를 갖는 생성자가 있다. 

만약, SmartPhone 클래스의 생성자에서 super(model, color)를 작성하지 않았다면

Phone 클래스의 기본 생성자를 호출했겠지만

super(model, color)를 통해 매개변수 2개가 있는 생성자를 호출했기 때문에

Phone(String model, String color) 생성자를 호출했다. 

728x90