JAVA

JAVA - 부모 생성자 호출을 위한 super 키워드 사용법

Cong_S 2022. 7. 5. 12:37

전 포스팅에서 메소드 오버라이딩을 위해 super 키워드를 사용해보았는데

https://cong-s.tistory.com/204?category=1018517 

 

JAVA - 메소드 오버라이딩(Method Overliding)에 대해 / super 키워드

메소드 오버라이딩(Method Overliding)에 대해 알아보자. 시작하기 전 전에 배운 메소드 오버로딩과의 차이점을 짚고 넘어가자. 메소드 오버라이딩(Method Overliding) : 상속하는 클래스 안에서, 즉 자식

cong-s.tistory.com

 

이번 포스팅에서는 부모 생성자 호출을 위해 super 키워드를 사용하는 법을 알아보자.

먼저 super 키워드의 의미는 상속해준 클래스를 뜻한다.

다시 말하면, 상속받은 클래스의 작성해준 extends ~ 의 ~ 에 해당하는 클래스를 뜻하는 키워드가 super이다.

 

이를 이용해서 생성자를 만들기 위해 부모 생성자를 호출하는 방법은 다음과 같다.

 

먼저 부모 클래스의 코드이다.

public class Person {
	
	protected int num;
	protected String name;
	protected String dept;
	protected String address;

 

다음은 상속받은 자식 클래스의 코드이다.

package main.person;

public class Student extends Person {

	public Student(int num, String name, String dept, String address, String[] subjects){
		// 상속해준 클래스를 의미하는 super 키워드 사용
		super(num, name, dept, address);
		this.subjects = subjects;
		  
	}
	
	public Student(){
		
	}

 

Student 생성자를 만들기 위해 상속받은 멤버 변수를 호출하는 과정에서

상속해준 부모클래스를 호출하는 super 키워드를 사용하는 것이다.

 

이는 상속 관계가 여러번이어도 적용할 수 있다.

package Grand;

public class GrandParent {
	
	public String name;
	public int age;
	
	public GrandParent() {
		System.out.println("GrandParent 생성자 호출됨.");
	}
	
	public void print() {
		System.out.println("name : " + name);
		System.out.println("age : "+ age);
	}
	
	public GrandParent(String name, int age) {
		this.name = name;
		this.age = age;		
	}
}

먼저 최상위 부모 클래스 코드

위 코드를 상속받은 부모 클래스 코드

package Grand;

public class Parent extends GrandParent{ 
                                                                                                                  
	public String job;

	public Parent(){
		System.out.println("Parent 생성자 호출됨.");
		
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		super.print();
		System.out.println("직업 : "+job);
	}

그리고 위 부모 클래스를 상속받은 클래스이다.

package Grand;

public class Child extends Parent {
	
//	String name;
//	int age;
//	
//	String job;
	// GrandParent 의 함수와 Parent의 함수 모두 상속받았다.
	
	public String hobby;
	
	public Child() {
		System.out.println("Child 생성자 호출됨.");
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		super.print();
		System.out.println("취미 : "+hobby);
	}

super 키워드로 부모 클래스들을 호출하는 코드이다.

 

package main;

import Grand.Child;
import Grand.GrandParent;
import Grand.Parent;

public class GrandMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// GrandParent 생성해서 데이터 셋팅한 후 화면 출력하세요.
		
		GrandParent gp = new GrandParent();
		
		gp.name = "홍길동";
		gp.age = 55;
		
		gp.print();
		
		System.out.println("-------------------------");
		
		Parent p = new Parent();
		
		p.name = "김나나";
		p.age = 33;
		p.job = "디자이너";
		
		p.print();
		
		System.out.println("-------------------------");
		
		Child c = new Child();
		c.name = "영수";
		c.age = 22;
		c.job = "개발자";
		c.hobby = "영화";
		
		c.print();

 

 

마지막 main 함수로 실행시킨 코드의 모습과 결과이다.

super 키워드를 통해 상속해준 상위 클래스들을 순차적으로 불러오며,

자식 클래스에 맞게 코드를 수정, 추가해서 실행시킬 수 있다.