개발이글스
[JAVA] super & super() 본문
1. super
super은 자식클래스가 부모클래스로부터 상속받은 멤버를 참조할 때 쓰는 참조변수입니다.
클래스 내의 멤버변수와 지역변수 이름이 같을 경우 구분을 위해서 this를 사용하듯이 부모클래스와 자식 클래스의 멤버의 이름이 같을 경우 super을 사용합니다.
class Parent{
int x = 10;
}
class Child extends Parent{
int x = 20;
void childMethod(){
System.out.print("x="+x);
System.out.print("this.x=" +this.x);
System.out.print("super.x="+super.x);
}
}
-> 부모클래스 Parent 의 멤버변수는 x, 자식클래스 Child의 멤버변수도 x입니다.
자식클래스의 메소드에서 자식클래스의 멤버변수를 쓸때는 this.를 써주고 부모클래스의 멤버변수를 가지고 오고싶다면 super.을 사용해줍니다.
2.super()
super()은 부모클래스의 생성자를 호출하는 메소드입니다. 상속받은 자식클래스가 부모 클래스의 멤버를 사용할 경우가 있을 수도 있으므로 부모 클래스를 우선적으로 초기화해줘야 합니다. 부모클래스의 생성자는 자식클래스의 생성자 첫줄에서 호출해줍니다. 이러한 부모클래스에 대한 생성자 호출은 상속관계에 따라 Object클래스까지 올라가서 마무리됩니다.
Object 클래스를 제외한 모든 클래스의 생성자의 첫줄에는 반드시 자신의 클래스의 또다른 생성자, this() 또는 부모클래스의 생성자, super()을 호출해줘야합니다. 이렇게 안하면 컴파일러가 자동으로 super()를 생성자의 첫줄에 호출합니다.
class Point{
int x = 10;
int y = 20;
Point(int x, int y){
this.x = x;
this.y = y;
}
}
class Point3D extends Point{
int z = 30;
Point3D(){
this(100, 200, 300);
}
Point3D(int x, int y, int z){
super(x, y);
this.z = z;
}
}
'Programming > Java' 카테고리의 다른 글
[JAVA] 생성자 오버로딩 (0) | 2022.09.14 |
---|---|
[JAVA] 업캐스팅 & 다운캐스팅 (0) | 2022.09.13 |
[JAVA] if문, switch문 (0) | 2022.09.06 |
[JAVA] 객체지향 프로그래밍(OOP) (0) | 2022.08.22 |
[Java] Collection - List, Set, Map (0) | 2022.07.13 |