YS's develop story

JAVA error) Implicit super constructor is undefined, Constructor call must be the first statement in a constructor. 본문

Java

JAVA error) Implicit super constructor is undefined, Constructor call must be the first statement in a constructor.

Yusang 2020. 10. 14. 08:07

안녕하세요 ~

오늘은 java 상속과 관련해서 에러를 정리하는 글을 작성했습니다 :)

 

 

아래와 같이 코드를 작성하게 되면 에러가 발생하게 됩니다.

package javapractice;

class JavaPractice {
	public static void main(String[] args) {
		
		subClass sub1= new subClass(52);
		System.out.println(sub1.i);
		}
	}

class superClass{
	
	int i;
	superClass(int i){
		System.out.println("this is super class");
		this.i=i;
	}	
}

class subClass extends superClass{
	subClass(int i){
		System.out.println("this is sub class");
	}
}
	

 

java에서는 상속을 할 경우 상위클래스의 생성자가 값을 인자로 받는다면

super 키워드를 통해 상위클래스의 생성자를 초기화 해주어야 합니다.

그렇기 않으면 위와 같이 에러가 발생합니다.

 

 

아래와 같이 코드를 수정 하면...

package javapractice;

class JavaPractice {
	public static void main(String[] args) {
		
		subClass sub1= new subClass(52);
		System.out.println(sub1.i);
		}
	}

class superClass{
	
	int i;
	superClass(int i){
		System.out.println("this is super class");
		this.i=i;
	}	
}

class subClass extends superClass{
	subClass(int i){
		System.out.println("this is sub class");
		super(i);
	}
}
	



 

어라..? 또 에라가 발생합니다.

 

Super를 이용한 상위 클래스의 생성자 호출문은 무조건 생성자의 첫 문장에 와야합니다.

그렇지 않으면 위와 같이 에러가 발생합니다. 

 

아래와 같이 코드를 수정하면 문제 없이 실행이 됩니다.

package javapractice;

class JavaPractice {
	public static void main(String[] args) {
		
		subClass sub1= new subClass(52);
		System.out.println(sub1.i);
		}
	}

class superClass{
	
	int i;
	superClass(int i){
		System.out.println("this is super class");
		this.i=i;
	}	
}

class subClass extends superClass{
	subClass(int i){
		super(i);
		System.out.println("this is sub class");
	}
}
	

 

super를 이용해 상위 클래스의 생성자를 호출 할 때

코드를 첫 문장에 작성하지 않아 에러가 발생하는 실수를 하지 맙시다 ~ 

 

 

마무리는 쌈무 짤로..

Comments