프로그래밍 언어/Java

[java 7강] 상속과 생성자 (2/2)

happy_life 2021. 11. 12. 12:48

상속과 생성자 (2/2)

코드 예제를 보며 상속과 생성자의 관계를 이해해보는 시간을 갖겠습니다.

 

코드 예제

class cal1{
	int left, right;
		
	public void cal1(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void setOprands(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void sum() {
		System.out.println(this.left + this.right);
	}
		
}
	
class Sustractcal extends cal1 {
		
		public Sustractcal(int left,int right) {
			this.left = left;
			this.right = right;
		}
		
		public void substract() {
			System.out.println(this.left - this.right);
		}
		
	}
	


public class cal{

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

위의 코드는 오류를 발생시키지 않습니다.

왜냐하면 상속받은 Sustractcal 클래스의 생성자가 호출되면

부모 클래스의 기본 생성자를 먼저 호출하는데 

부모 클래스의 생성자는 자동으로 생성되기 때문입니다.

 

자동 호출 

 

●오류 코드 예제

class cal1{
	int left, right;
		
    //!-- 코드상 추가된 cal1의 생성자 
	public cal1(int left,int right) {
		this.left = left;
		this.right = right;
	}
		
	public void cal(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void setOprands(int left, int right) {
		this.left = left;
		this.right = right;
	}
		
	public void sum() {
		System.out.println(this.left + this.right);
	}
		
}
	
class Sustractcal extends cal1 {
		
	public Sustractcal(int left,int right) {
		this.left = left;
		this.right = right;
	}
		
	public void substract() {
	System.out.println(this.left - this.right);
	}	
}
	


public class cal{

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

 

왜냐하면 생성자를 직접 추가하였으므로,

자바가 자동으로 기본 생성자를 만들어주지 않았기 때문입니다.

따라서, 부모 클래스에 기본 생성자가 없기에 오류가 발생하는 것입니다.

 

●해결방법

 

따라서

기본 생성자인 public cal1() {}를 코드에 추가해주면 해결됩니다.

기본 생성자 추가

 


또는 부모 클래스와 자식 클래스의 생성자가 같은 모양일 경우 

자식 클래스의 생성자 부분에  

super 라는 것을 사용할 수 있습니다.

super사용

 

super 키워드는 부모 클래스를 의미합니다.

super() 는 부모 클래스 생성자를 의미합니다. 

 

이런식으로 하위 클래스가 상위 클래스를 참조할 수 있게 하는 키워드가 super입니다.