728x90

 

상속(Inheritance)의 생성자(Contructor)

 

Cal 클래스가 생성자가 있다고하면 어떻게 될지 보자

class Cal1111 {
	int v1,v2;				  	      // 정수 데이터타입 세팅
	Cal1111(int v1, int v2) { 	// 생성자 
		this.v1 = v1; this.v2 = v2;
		//매개변수에 들어온 값
	}
}
class Cal3333 extends Cal1111{    // error 발생
}
public class Inheritance05 {
	public static void main(String[] args) {
		
		Cal1111 c1 = new Cal1111(2,1); // new cal() 안에 입력값 2,1입력
		Cal3333 c3 = new Cal3333();
	}
}

위와 같이 코드를 작성하니 아래와 같이 에러가 발생했다

오리지널 클래스(cal)을 제대로 계승했다면, Cal이 인스턴스로 만들어질 때 반드시 해야되는 일들이 생성자에 들어있다. 때문에 이 생성자를 Cal3도 실행시켜야만 제대로 작동한다

자식 클래스에서 부모클래스를 계승 받아 실행하게 될 때, 반드시 부모클래스생성자실행하도록 규칙을 만들어 놓은 것.

 

 

아래의 코드를 실행할 경우

부모클래스인 cal1에서 println() 한번 : Cal init!!!

자식클래스인 cal3에서 println() 두번 : Cal init!!! & Cal3 init!!!

자식클래스인 cal3에서 super(v1, v2);가 부모클래스 생성자를 실행키는데 이 코드가 부모코드의 println()을 한번 더 실행켜서 cal 한번 cal3 자체에서 한번 더 실행되서 총 두번이 출력되는 것

class Cal1111 {
	int v1,v2;				  	// 정수 데이터타입 세팅
	Cal1111(int v1, int v2) { 	// 생성자 
		this.v1 = v1; this.v2 = v2;
		//매개변수에 들어온 값
		System.out.println("Cal init!!!");
	}
}
class Cal3333 extends Cal1111{  // extends : Cal1을 상속
	Cal3333(int v1, int v2) {
		**super**(v1, v2);	// **super**=부모클래스. 즉,부모클래스의 생성자를 실행시킴. 
						// 부모클래스의 생성자는 아래와 같다
						// Cal1111(int v1, int v2) {
						// 		this.v1 = v1; this.v2 = v2;
	System.out.println("Cal3 init!!!");
	}
}
public class Inheritance05 {
	public static void main(String[] args) {
		// new cal() 안에 입력값 2,1 새로 입력
		Cal1111 c1 = new Cal1111(2,1); // 출력 : 클래스cal1에서 println() 한번만 출력 
		Cal3333 c3 = new Cal3333(2,1); // 출력 : super(v1, v2); 이 문구가 
									   // 클래스cal1에서 println() 한번 출력시키고
									   // 클래스cal3에서 println() 한번 출력시켜 두번출력
	}
}

전체코드

728x90
반응형

+ Recent posts