Java super keyword



자바의 슈퍼 키워드는 부모 클래스 객체를 즉시 참조할 때 사용하는 참조변수입니다.


여러분이 서브클래스의 인스턴스를 만들 때, 부모 클래스의 인스턴스는 내재적으로 만들어집니다.

슈퍼 참조 변수에 의해서 참조되죠. 




Usage of java super keyword

 자바 슈퍼 키워드의 사용법


1. 부모 클래스 인스턴스 변수를 즉시 참조 할 때 사용합니다. 

2. super()는 부모 클래스 생성자를 즉시 호출 할 때 사용합니다.

3. 부모 클래스 메소드를 즉시 호출 할 때 사용합니다.




1) 부모 클래스 인스턴스 변수를 즉시 참조 할 때 사용.

 슈퍼 키워드가 없을 경우 문제



class Vehicle{

   int speed=50;

}

class Bike3 extends Vehicle{

   int speed=100;

   void display(){

     System.out.println(speed); //바이크의 속도가 출력

   }

   public static void main(String args[]){

     Bike3 b=new Bike3();

     b.display();

}

}


output:100


위의 예에서 Vehichle 과 Bike 두 개 클래스는 속도에 대해 공동의 속성을 가집니다.

현재 클래스의 인스턴스 변수는 bydefault 인스턴스에 의해 참조되지만, 여러분은 부모 클래스 인스턴스 변수를 참조하려 합니다.  

이것이 수퍼키워드를 사용하는 이유입니다. 부모 클래스 인스턴스 변수와 현재 클래스 인스턴스 변수 사이를 구분하기 위함이죠.


해법은 슈퍼 키워드



//수퍼키워드 예시


class Vehicle{

int speed=50;

}


class Bike4 extends Vehicle{

int speed=100;


void display(){

System.out.println(super.speed); // 현재 차량의 속도가 출력

}

public static void main(String args[]){

Bike4 b=new Bike4();

b.display();


}


output:50






2) super()는 부모 클래스 생성자를 즉시 호출 할 때 사용

 

수퍼 키워드는 부모 클래스 생성자를 호출하는데 사용될 수 있습니다. 

아래 처럼요.




class Vehicle{

Vehicle(){System.out.println("Vehicle is created");}

}


class Bike5 extends Vehicle{

Bike5(){

super(); // 부모 클래스 생성자가 호출

System.out.println("Bike is created");

}

public static void main(String args[]){

Bike5 b=new Bike5();


}

}   


output: Vihicle is created

Bike is created


NOTE : 컴파일러에 의해 super ()는 자동으로  클래스 생성자에 추가되었습니다.  


잘 아시다 시피, 초기 생성자는 컴파일러에 의해 제공되고, 또한 첫번째 명령문에 super()가 자동적으로 추가됩니다. 


내장 컴파일러에 의해 수퍼()를 전달 받은 수퍼 키워드 다른 예 



class Vehicle{

  Vehicle(){System.out.println("Vehicle is created");}

}


class Bike6 extends Vehicle{

  int speed;

  Bike6(int speed){

    this.speed=speed;

    System.out.println(speed);

  }


  public static void main(String args[]){

  Bike6 b=new Bike6(10);

 }

}  


output:Vehicle is created





3) super 는 부모 클래스 메소드를 호출 할 때 사용될 수 있음


수퍼 키워드는 부모 클래스 메소드를 호출할 때 이용될 수 있습니다.

수퍼 키워드는 서브클래스가 부모클래스 만큼 동일한 메소드를 포함하는 경우 사용해야 합니다. 




class Person{

void message(){System.out.println("welcome");}

}


class Student16 extends Person{

void message(){System.out.println("welcome to java");}


void display(){

message(); // 현재 클래스 메세지() 메소드가 호출 됨

super.message(); // 부모 클래스 메세지 () 메소드가 호출 됨

}


public static void main(String args[]){

Student16 s=new Student16();

s.display();

}

}




output:welcome to java

       welcome


위의 예에서 학생과 사람들 두 개의 클래스는 메세지() 메소드를 가집니다. 만약 학생 클래스로부터 메세지 () 메소드를  부른다면, 사람 클래스가 아니라 학생 클래스의 메세지 () 메소드가 불려집니다. 우선사항이 주어지기 때문입니다. 


서브 클래스에 메소드가 없는 경우, super를 사용할 필요가 없습니다. 







영어원문내용출처 :http://www.javatpoint.com/

번역,의역 및 작성 : 초코토끼

검수 : 개발토끼

오역 및 오타의 지적은 겸손히 받겠습니다





+ Recent posts