JAVA - 부모 생성자 호출을 위한 super 키워드 사용법
전 포스팅에서 메소드 오버라이딩을 위해 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 키워드를 통해 상속해준 상위 클래스들을 순차적으로 불러오며,
자식 클래스에 맞게 코드를 수정, 추가해서 실행시킬 수 있다.