내공 100 자바 super() 키워드 오류

내공 100 자바 super() 키워드 오류

작성일 2024.01.09댓글 2건
    게시물 수정 , 삭제는 로그인 필요

아래 코드에 대한 질문 3가지입니다 ㅜㅜ 너무 헷갈려요.. 제발 답변 부탁드립니다..

1. 자식 클래스에서는 생성자 오버라이딩이 일어나고 있는 건가요?
2. super(n);을 지우고 부모 클래스에 protected String n;을 추가한 다음 자식 클래스 생성자에서 this.n = n;이라 하면 오류가 나던데 왜 그런 건가요?? (바꾼 코드도 아래에 참조했습니다!)
3. super() 키워드는 대체 언제 사용하는 건가요? 

package Day13;


class Calc2 {

public Calc2(String n) {

System.out.println(n);

}

}


class ComputerCalc2 extends Calc2 {

public ComputerCalc2(String n) {

super(n);

System.out.println("Computer");

}

}


public class EX05 {


public static void main(String[] args) {

// TODO Auto-generated method stub

ComputerCalc2 com = new ComputerCalc2("Test");

}


}


바꿔본 코드


package Day13;


class Calc2 {

protected String n;

public Calc2(String n) {

System.out.println(n);

}

}


class ComputerCalc2 extends Calc2 {

public ComputerCalc2(String n) {

this.n = n;

System.out.println("Computer");

}

}


public class EX05 {


public static void main(String[] args) {

// TODO Auto-generated method stub

ComputerCalc2 com = new ComputerCalc2("Test");

}


}


#내공 100 #내공 100 뜻 #내공 100 초등 #내공 100 가격 #내공 100 지식인 #구몬 내공 100

profile_image 익명 작성일 -

1. 자식 클래스에서는 생성자 오버라이딩이 일어나지 않습니다.

생성자는 상속되지 않으므로 오버라이딩이 불가능합니다. 클래스가 생성될 때 호출되는 생성자는 그 클래스의 생성자입니다. 부모 클래스의 생성자와 자식 클래스의 생성자는 별개입니다.

2. this.n = n; 을 사용하려면 n이 부모 클래스에서 선언되어야 합니다.

하지만 자바에서는 자식 클래스의 생성자가 호출되기 전에 부모 클래스의 생성자가 먼저 호출되어야 합니다. 그렇기에 super(n);을 지우고 this.n = n; 을 사용하려 하면 부모 클래스의 생성자가 먼저 호출되지 않았기 때문에 n이 아직 초기화되지 않아 오류가 발생한 것으로 보입니다.

3. 2번에서 얘기한 것처럼 자식 클래스의 생성자가 호출되기 전에 부모 클래스의 생성자가 먼저 호출되어야 합니다. 이를 위해 super() 키워드를 사용하는거죠.

저 키워드는 부모 클래스의 기본 생성자를 호출하는데 사용되고 반드시 자식 클래스의 생성자 첫 줄에 위치해야 합니다. 만약 부모 클래스에 기본 생성자가 없다면 매개변수가 있는 생성자를 명시적으로 호출해야 하는데, 이 경우 super(n);과 같은 형태로 사용되는거죠

profile_image 익명 작성일 -

코드를 올릴 때는 소스코드 삽입기능을 아래와 같이 이용해 보세요.

Calc2 는 생성자가 파라미터가 있는 Calc2(String n) 만 있습니다.

이럴 때는 기본생성자가 자동으로 생성되지 않으니 기본생성자가 필요하면 반드시 명시하여 정의해야 합니다.

public Calc2() { }

ComputerCal2 의 생성자에서 super(n); 생성자를 생략하면

자동으로 부모의 기본 생성자를 컴파일시 삽입하므로 super(); 가 호출되는 것으로 처리된다.

그런데 Calc2는 기본생성자가 없으므로 오류가 발생한다.

따라서 기본 생성자가 없는 부모 클래스를 상속 했을 경우 자식 생성자 첫줄에 존재하는 부모생성자를 호출해줘야 한다.

package Day13; class Calc2 { protected String n; public Calc2(String n) { System.out.println(n); } } class ComputerCalc2 extends Calc2 { public ComputerCalc2(String n) { super(n); // 이거 생략하면 안됩니다. this.n = n; System.out.println("Computer"); } } public class EX05 { public static void main(String[] args) { ComputerCalc2 com = new ComputerCalc2("Test"); } }
Test Computer

내공 100 자바스크립트 함수부분...

... function 키워드로 만들어진 함수의 특징을 설명드리자면, 자바스크립트가 코드를 실행하는 과정에서... num1, num2가 number형이 아닌지 검사해서, 오류...

자바 상속오류 내공100

클래스 상속오류가나요 코딩좀봐주세요 밑 코드로 해보세요... public Univfriend(String na, String ma, String ph) { super(na,ph); major...

자바 오류 잡아주셈 내공 100!

... super(from, to, content); // 여기는 상위 클래스의 생성자를 사용하니까 super로 this.tel... super(from, to, content); // 여기도 상위...

오류 질문이여(내공100)

... public Striker(int goal, int assist, int num) { super(goal, assist, num); if... java:12) 제가 프로그램을 짰는데 이렇게 오류가 뜨네요 왜...