super, super() 완벽 이해하기
Java 코드를 보다보면 super 키워드는 자주 등장합니다. 이번 포스팅에서는 super, super()에 대해 다뤄보려고 합니다. 하지만 위의 키워드를 이애하기 위해서는 객체지향프로그래밍 언어인 Java에 상속에 대해 먼저 알아야 합니다.
상속(Inheritance)이란?
상속(Inheritance)은 기존 클래스의 멤버변수와 메서드를 이어 받아 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다.
위의 그림을 보면 부모 클래스로 부터 상속받아 생성된 자식 클래스가 부모 클래스를 포함하고 있는 것을 볼 수 있으며, 부모 클래스에 없는 추가된 멤버를 정의한 것을 확인할 수 있습니다.
상속(Inheritance) 예제
class Parent {
//접근 제어자 private으로 선언된 멤버 변수는 자식 클래스에서 접근 불가능
private string phoneNumber = "010-1234-5678";
public String address = "경기 안산시";
}
class Child extends Parent {
public int age = 25;
void search () {
//System.out.println(phoneNumber);
System.out.println(address);
System.out.println(age);
}
}
public class Inheritance {
public static main(String[] args) {
Child child = new Child();
child.search();
}
}
// --------------------------------------------------------------------------------
// 경기 안산시
// 25
상속(Inheritance)과 super 키워드의 관계?
super 키워드는 자식 클래스에서 부모 클래스를 참조할 때 사용합니다. 자기 자신을 참조하는 this 키워드와 다른 개념이므로 예제를 통해 비교해보도록 하겠습니다.
2022.12.03 - [프로그래밍언어/JAVA] - [JAVA] this 키워드
this, super 비교 예제
class Parent {
public int = 20;
}
class Child extends Parent {
public int age = 25;
void search () {
//자식 클래스 참조
System.out.println(this.age);
//부모 클래스 참조
System.out.println(super.age);
}
}
public class Inheritance {
public static main(String[] args) {
Child child = new Child();
child.search();
}
}
// --------------------------------------------------------------------------------
// 20
// 25
this.age | super.age |
자기 자신 참조 | 부모 클래스 참조 |
결과값 : 20 | 결과값 : 25 |
this(), super() 비교
- this() : 같은 클래스의 다른 생성자를 호출할 경우 사용
- super() : 자식 클래스에서 부모 생성자를 호출할 경우 사용
this(), super() 비교 예제
class Parent {
public String addr;
public int age;
public Parent(String addr, int age0 {
this.addr = addr;
this.age = age;
}
}
class Child extends Parent {
public String addr;
public int age;
public Child(String addr, int age) {
super(addr + " 상록구", age + 10);
this.addr = addr;
this.age = age;
}
void search () {
System.out.println("Parent cLass : {" + addr + ", " + age + "}");
System.out.println("Child cLass : {" + super.addr + ", " + super.age + "}");
);
System.out.println(super.age);
}
}
public class Inheritance {
public static main(String[] args) {
Child child = new Child("경기 안산시", 20);
child.search();
}
}
// --------------------------------------------------------------------------------
// Parent class : {경기 안산시, 20}
// Child class : {경기 안산시 상록구, 30}
'Languages > Java' 카테고리의 다른 글
[Java]toString() 메서드는 왜 만들어졌을까? (7) | 2023.01.30 |
---|---|
[Java]Map의 요소를 반복하는 다양한 방법 (5) | 2023.01.26 |
[Java]삼항 연산자(조건 연산자)로 불필요한 IF 문 줄이기 (6) | 2023.01.18 |
[Java]클래스와 객체 그리고 인스턴스와의 차이 (6) | 2023.01.17 |
[JAVA]ArrayList의 동작 및 내부 구현 (2) | 2023.01.13 |