ProgramingTip

super ()는 언제 사용합니까?

bestdevel 2020. 10. 13. 08:12
반응형

super ()는 언제 사용합니까?


현재 Java 과정에서 클래스 상속에 대해 배우고 있는데 super()언제 호출 을할지 모르겠습니다.

편집 : 사용되는
코드 예제를 찾았습니다 .super.variable

class A
{
    int k = 10;
}

class Test extends A
{
    public void m() {
        System.out.println(super.k);
    }
}

그래서 여기 에서 수퍼 클래스 superk변수에 액세스하는 것을 이해합니다 . 그러나 다른 경우에는 무엇 super();대표합니까? 그 자체로?


정확히 전화 하는super() 것은 항상 전화를 받습니다 . 적으로 수행되는 작업을 명시 적으로 수행합니다. 수퍼 생성자에 대한 호출을 생략하면 인수가없는 수퍼 생성자가 어쨌든 자동으로 호출되기 때문입니다. 나쁜 스타일이라고 말하는 것은 아닙니다. 어떤 사람들은 노골적인 것을 좋아합니다.

그러나 이것은 수퍼 생성자가 클래스에서 전달하려는 클래스입니다.

public class Animal {
   private final String noise;
   protected Animal(String noise) {
      this.noise = noise;
   }

   public void makeNoise() {
      System.out.println(noise);
   }
}

public class Pig extends Animal {
    public Pig() {
       super("Oink");
    }
}

super부모 클래스 constructor, methods호출에 사용 properties됩니다.


super하위 클래스에서 재정의 한 경우 상위 하위 클래스에서 메소드를 호출하려는 경우 하위 클래스에서 키워드를 사용할 수도 있습니다 .

예 :

public class CellPhone {
    public void print() {
        System.out.println("I'm a cellphone");
    }
}

public class TouchPhone extends CellPhone {
    @Override
    public void print() {
        super.print();
        System.out.println("I'm a touch screen cellphone");
    }
    public static void main (strings[] args) {
        TouchPhone p = new TouchPhone();
        p.print();
    }
}

여기에서 라인 super.print()print()수퍼 클래스 메소드를 호출합니다 CellPhone. 출력은 다음과 가변합니다.

I'm a cellphone
I'm a touch screen cellphone

슈퍼 클래스 생성자가 호출되기를 원할 때-그 안의 필드를 초기화합니다. 언제 사용하는지 이해하는 것이 좋습니다.

http://download.oracle.com/javase/tutorial/java/IandI/super.html


부모 클래스의 생성 호출하기 위해 하위 클래스 생성자의 첫 번째 줄로 사용합니다.

예를 들면 :

public class TheSuper{
    public TheSuper(){
        eatCake();
    }
}

public class TheSub extends TheSuper{
    public TheSub(){
        super();
        eatMoreCake();
    }
}

의 인스턴스를 생성 TheSub하면 eatCake()eatMoreCake()


이를 사용하여 슈퍼 클래스의 메서드를 호출 할 수 있습니다 (예 : 이러한 메서드를 재정의 할 때 super.foo () 등). 이렇게하면 해당 기능을 유지하고 재정의에있는 다른 모든 항목에 추가 할 수 있습니다. 방법.


Super는 부모 메서드를 호출합니다. 참조 : http://leepoint.net/notes-java/oop/constructors/constructor-super.html


super()특별히 슈퍼 클래스의 생성자를 실행하기 위해 호출 합니다. 클래스에 여러 생성자가있을 수 있으므로 특정 생성자를 사용 super()하거나 super(param,param)Java가 처리하도록 허용하고 표준 생성자를 호출 할 수 있습니다. 클래스 계층 구조를 따르는 클래스는 "is-a"관계를 따릅니다.


서브 클래스 생성자의 첫 번째 줄은 super()수퍼 클래스의 생성자가 호출되도록 하기위한 호출이어야합니다 .


방금 시도해 보았습니다. super (); @Mark Peters가 말한 것처럼 주석없이 동일한 작업을 수행합니다.

package javaapplication6;

/**
 *
 * @author sborusu
 */
public class Super_Test {
    Super_Test(){
        System.out.println("This is super class, no object is created");
    }
}
class Super_sub extends Super_Test{
    Super_sub(){
       super();
       System.out.println("This is sub class, object is created");
    }
    public static void main(String args[]){
        new Super_sub();
    }
}

오라클 문서 페이지에서 :

메서드가 수퍼 클래스의 메서드 중 하나를 재정의하는 경우 키워드를 사용하여 재정의 된 메서드를 호출 할 수 있습니다 super.

를 사용 super하여 숨겨진 필드를 참조 할 수도 있습니다 (필드를 숨기는 것은 권장되지 않음).

super하위 클래스 생성자에서 사용 :

수퍼 클래스 생성자의 호출은 서브 클래스 생성자의 첫 번째 행이어야합니다.

슈퍼 클래스 생성자를 호출하는 구문은 다음과 같습니다.

super();  

또는:

super(parameter list);

를 사용하면 super()인수없는 슈퍼 클래스 생성자가 호출됩니다. 를 사용하면 super(parameter list)일치하는 매개 변수 목록이있는 슈퍼 클래스 생성자가 호출됩니다.

참고 : 생성자가 명시 적으로 수퍼 클래스 생성자를 호출하지 않는 경우 Java 컴파일러는 수퍼 클래스의 인수가없는 생성자에 대한 호출을 자동으로 삽입합니다 . 슈퍼 클래스에 인수가없는 생성자가 없으면 컴파일 타임 오류가 발생합니다.

관련 게시물 :

다형성 vs 재정의 vs 오버로딩

참고 URL : https://stackoverflow.com/questions/4090834/when-do-i-use-super

반응형