Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[생활코딩-자바입문] 상속과 생성자 본문

Java

[생활코딩-자바입문] 상속과 생성자

JH_Lucid 2020. 11. 5. 21:27

생활코딩 26. 상속과 생성자

 

1) 기본 생성자

- 자기 자신을 인스턴스화하는 클래스가 가능하다.

자기 자신을 main에서 instance화 하는 class

 

- 생성자를 정의하지 않을 경우, 기본 생성자가 실행된다. 만약 생성자를 매개변수가 있도록 정의하면, 아래처럼 오류

매개 변수 있는 생성자 정의하면, 정의된 생성자가 default가 되므로, 아래처럼 생성자 사용하면 오류가 발생한다.

 

- 다음처럼, 인자가 없는 생성자를 필히 생성해줘야 한다.

빈 생성자를 생성하여, 오류를 없앴다.

 

2) super

- 상속받는 자식클래스 생성 시, 부모 클래스의 기본 생성자를 자동으로 호출하게 됨. 만약 부모 클래스에 사용자 정의(매개변수 있는) 생성자가 있게 된다면 자바는 자동으로 부모 클래스의 기본 생성자를 만들어 주지 않게 된다.                                           

- 따라서 자식이 부모의 기본 생성자를 호출하게 되면 에러가 발생한다. 없기 때문에. 이를 해결하기 위해 부모 클래스의 생성자를 만든다.

- 하지만, 대부분 부모 클래스 / 자식 클래스의 생성자는 같은 일을 중복적으로 하고 있다.

- super 키워드로 해결한다. 아래와 같이, super를 통해 부모클래스의 생성자를 호출한다. 다만 부모 클래스에는 생성자가 두 개 정의되어야 오류가 발생하지 않는 것으로 보인다.

- 또 한가지 유의할 점은, 하위 클래스의 초기화 코드는 항상 상위 클래스 생성자 호출(super) 다음에 나타나야 한다는 것이다. 

부모 클래스가 초기화 되기 전, 자식이 먼저 초기화 되는 걸 방지하기 위함이다. 자식이 다 초기화 해놨는데(실질적으로 사라지면 안되는 부분) super로 덮어버리면 의미없기 때문이다.

package org.opentutorials.javatutorials.scope;

class substractcalculator extends Calculator {
	public substractcalculator(int left, int right) {
		super(left, right);  // 이 부분 주목
	}
	public void substract() {
		System.out.println(this.left - this.right);
	}
	
}
public class calculatorconstructordemo4 {

	public static void main(String[] args) {
		substractcalculator c1 = new substractcalculator(10, 20);
		c1.sum();
		c1.avg();
		c1.substract();
	}
}

 

Comments