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
반응형
'JAVA > 생활코딩 JAVA 상속' 카테고리의 다른 글
Java 상속(Inheritance) : 핵심정리 (0) | 2022.02.06 |
---|---|
Java 상속(Inheritance) - 6. 수업을 마치며 : 다형성(Polymorphism), 접근제어자, Final, Abstract (0) | 2022.02.06 |
Java 상속(Inheritance) - 4. this & super (0) | 2022.02.06 |
Java 상속(Inheritance) - 3. Overriding vs Overloading (0) | 2022.02.06 |
Java 상속(Inheritance) - 2. 기능의 개선과 발전 : 자식클래의 기능 추가 & 수정 (0) | 2022.02.06 |