본문 바로가기

Java/Java 상속

상속과 생성자

728x90
반응형

 

부모 class 에 생성자가 있는 채로 상속을 받았다면, 그 부모 class 를 상속받는 자식 class도 생성자를 가져와야한다.

java에서는 그렇게 강제되어 있다고 하는데여

 

class Cal{
	int v1, v2;
	Cal(int v1, int v2){
		this.v1=v1; this.v2=v2;
	}
}

//에러남
class Cal3 extends Cal{

}


public class InheritanceApp {

	public static void main(String[] args) {
		Cal c = new Cal(2, 1);
		Cal3 c3 = new Cal3();
		
		}
	
}

 

이렇게 부모 class 인 Cal 에 생성자가 있으면 자식 class에 오류가 난다. 

오류를 해결해주기 위해서는 자식 class에도 부모 class의 생성자를 끌고온 생성자를 똑같이 써주어야한다. 

 

 

 

eclipse는 이걸 알아서 자동으로 만들어준다. 한 번 보자면

class Cal{
	int v1, v2;
	Cal(int v1, int v2){
		this.v1=v1; this.v2=v2;
		System.out.println("Cal1"); //Cal1
	}
	public int sum() {return v1+v2;}
}

class Cal3 extends Cal{
	
	Cal3(int v1, int v2) {
		super(v1, v2);//Cal1 위의 상속자를 그대로 copy 했기 때문에
		
		System.out.println("Cal3"); //Cal3
	}
	
	public int minus() {return this.v1-v2;}

}


public class InheritanceApp {

	public static void main(String[] args) {
		Cal c = new Cal(2, 1);
		Cal3 c3 = new Cal3(2, 1);
		
		System.out.println(c3.sum()); //  3
		System.out.println(c3.minus()); // 1
		
		
		}
	
}

	

Cal3이라는 상속자를 자동으로 만들어주고, 이때 super을 사용해서 Cal에 있는 변수를 그대로 사용한다고까지 표시를 해준다. 

 

그리고 나서 아래 main 메소드에 실행 코드까지 적어주고 나서 디버그를 걸고 코드를 돌려봤더니

 

Cal1

Cal1

Cal3

3

1

 

이라는 결과값이 나왔다. 

처음에 저 두번째 Cal1이 대체 왜 나오는건가 했는데

Cal 생성자를 super을 통해서 그대로 가져왔기 때문에 그 안의 내용이 실행되는거였다

 

 

이해해서 뿌듯하당

 

 

 

728x90
반응형

'Java > Java 상속' 카테고리의 다른 글

this & super  (0) 2020.12.01
Overriding vs Overloading  (0) 2020.12.01
Overriding  (0) 2020.12.01
Java에서 상속  (0) 2020.12.01