생성자에 super ()를 넣을 필요가 없습니까?
서브 클래스의 생성자에 넣지 않으면 컴파일러가 자동으로 넣지 않습니까?
그것은 내가 그것에 대해 신경 쓸 필요가 없다는 것을 의미합니까? 일부 기사에서 그들은 그것을 내놓았습니다.
그리고 인수가있는 생성자가 하나 있으면 이것이 생성자입니까, 아니면 인수 목록이없는 생성자를 사용합니까?
먼저 몇 가지 용어 :
- 인수 없음 생성자 : 매개 변수가없는 생성자;
- 접근 가능한 no-args 생성자 : 서브 클래스에 보이는 수퍼 클래스의 no-args 생성자. 즉, 공개 또는 보호 중이거나 두 클래스가 모두 동일한 패키지에 있으면 패키지 액세스를 의미합니다. 과
- 기본 생성자 : 클래스에 명시 적 생성자가없는 경우 컴파일러가 추가 한 공용 인수 없음 생성자.
따라서 모든 클래스에는 생성자가 하나 이상 있습니다.
서브 클래스 생성자 는 서브 클래스의 생성자에서 코드를 실행하기 전에 호출 할 수퍼 클래스의 생성자 가 가장 먼저하는 일을 지정할 수 있습니다 .
서브 클래스 생성자가 호출 할 수퍼 클래스 생성자를 지정하지 않으면 컴파일러는 수퍼 클래스에서 액세스 가능한 인수 없음 생성자를 자동으로 호출합니다.
수퍼 클래스에 인수 없음 생성자가 없거나 액세스 할 수없는 경우 (서브 클래스 생성자에서) 호출 할 수퍼 클래스 생성자를 지정하지 않으면 컴파일러 오류이므로 지정 해야 합니다.
예를 들면 다음과 같습니다.
public class Base { }
public class Derived extends Base { }
생성자를 명시 적으로 추가하지 않으면 Java가 공개 기본 생성자를 입력하기 때문에 괜찮습니다.
public class Base { }
public class Derived extends Base { public Derived(int i) { } }
또한 괜찮습니다.
public class Base { public Base(String s) { } }
public class Derived extends Base { }
Base에는 기본 생성자가 없으므로 위의 컴파일 오류입니다.
public class Base { private Base() { } }
public class Derived extends Base { }
Base의 no-args 생성자가 private이기 때문에 이것은 또한 오류입니다.
수퍼 클래스 생성자가 인수가 없으면 Java가 자동으로 호출합니다. 인수가 있으면 오류가 발생합니다.
src : http://java.sun.com/docs/books/tutorial/java/IandI/super.html
인수가없는 수퍼 생성자를 호출하면 화면 공간과 프로그래머 시간이 낭비됩니다. 컴파일러는 작성 여부에 관계없이 정확히 동일한 코드를 생성합니다.
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}
업데이트 (2018 년 12 월) :
명시 적 작성 super()
은 IDE에서 소스 코드를 탐색하는 데 도움이됩니다.
2018 년 12 월 현재 Eclipse 나 IntelliJ 는 파생 클래스의 생성자에서 기본 클래스의 생성자로 편안하게 탐색 할 수있는 방법을 제공하지 않습니다 .
기본 상위 생성자는 호출하지 않아도 하위 기본 생성자에서 호출됩니다.
본관
public class Main {
public static void main(String[] args) {
A a = new B();
}
}
ㅏ
public class A {
public A() {
System.out.println("A");
}
}
비
public class B extends A {
public B() {
System.out.println("B");
}
}
인쇄물
A
B
super ([arguments])라고 명시 적으로 지정되지 않은 경우 모든 클래스 생성자는 항상 "super ()"를 호출합니다. 프로그래밍하는 동안 슈퍼 클래스 생성자의 액세스 만 염두에 두어야합니다. 특정 클래스를 확장하지 않으면 자동으로 java.lang이 확장됩니다. . 객체 클래스
abstract class Book
{
String title;
String author;
Book(String t,String a){
title=t;
author=a;
}
abstract void display();
}
수퍼 클래스에 No-args 생성자가있을 수 있으면 인수 생성자가없는 것이 좋습니다.
수퍼 클래스에 인수 없음 생성자가 없거나 액세스 할 수없는 경우 (서브 클래스 생성자에서) 호출 할 수퍼 클래스 생성자를 지정하지 않으면 컴파일러 오류이므로 지정해야합니다.
class MyBook extends Book{
int price ;
public MyBook(String t,String a,int price){
super(t,a);
this.price=price;
}
public void display(){
System.out.println("Title: "+title);
System.out.println("Author: "+author);
System.out.println("Price: "+price);
}
}
참고 URL : https://stackoverflow.com/questions/2054022/is-it-unnecessary-to-put-super-in-constructor
'Programing' 카테고리의 다른 글
항목의 순서에 관계없이 동일성을 위해 두 컬렉션을 비교 (0) | 2020.06.08 |
---|---|
복사 생성자 비활성화 (0) | 2020.06.08 |
MYSQL이 더 높은 LIMIT 오프셋으로 인해 쿼리 속도가 느려지는 이유는 무엇입니까? (0) | 2020.06.07 |
어떤 Linux / Unix 명령이 구식이며 강력한 대안이 있습니까? (0) | 2020.06.07 |
ClickOnce 응용 프로그램의 폴더 경로를 얻는 방법 (0) | 2020.06.07 |