Java - 상속과 생성자

CHA·2022년 11월 15일
0

JAVA 개념조각

목록 보기
3/4

생성자를 통한 초기화

다음 코드를 보자.

class Parent{
	String name;
    public Parent(String name){
    	this.name = name;
    }
	
}

class Child extends Parent{
	int age;
    public Child(int age){
    	this.age = age;
    }
}

Parent 클래스와 Child 클래스가 정의되어 있다.
이 상황에서 Child 클래스를 인스턴스화 하게 된다면, 부모 클래스의 변수 또한 상속이 이루어지게 된다. 그런데 문제는 이 인스턴스 안에는 부모클래스의 변수는 초기화 되지 않는 문제가 발생한다. 이러한 상황이라면 부모클래스의 변수는 어떠한 방식으로 초기화를 해주어야 할까?

- 자식 클래스에서 부모클래스의 변수를 생성자를 통해 초기화

다음 코드를 보자.

class Parent{
	String name;
}

class Child extends Parent{
	int age;
    public Child(int age,String name){
    	this.age = age;
        this.name = name;
    }
}

하지만 이러한 코드작성은 적절한 생성자의 생성으로는 보기 힘들다. 자바는 상속관계에 있을지라도 부모클래스의 멤버는 부모클래스의 생성자를 통해 초기화 할것을 유도하고 있다. 그렇다면, 위에서 작성한 코드는 적절하지 않음을 알 수 있다. 그렇다면 다른 방법은 무엇이 있을까?

- super 키워드 사용

class Parent{
	String name;
    public Parent(String name){
    	this.name = name;
    }
}

class Child extends Parent{
	int age;
    public Child(int age,String name){
    	super(name);
        this.age = age;
    }
}

자식클래스를 인스턴스화할때 부모의 생성자가 자동으로 호출이 된다. 부모의 생성자가 매개변수가 있는 경우라면 기본생성자가 호출이 안되기 때문에
이때에는 자식 생성자에서 super 키워드를 통해 부모생성자를 명시적으로 호출해주어야 한다. 또한 자식생성자보다 부모생성자가 먼저 호출이 되야하기 때문에 super 키워드를 이용하여 호출할때에는 자식 생성자의 몸체 맨 앞부분에 작성해주어야 한다.

마지막으로 다음 두가지를 기억하자.

  1. 자식 클래스의 인스턴스 생성 시 부모클래스, 자식클래스 생성자 모두 호출된다.
  2. 자식 클래스의 인스턴스 생성 시 부모 클래스의 생성자가 먼저 호출된다.
profile
Developer

0개의 댓글