728x90
부모 생성자를 호출하는 super()
super()는 부모의 기본 생성자를 호출하기 위해서 사용한다.
만약에 자식 클래스의 생성자가 명시적으로 생성되지 않는다면 컴파일러는 아래와 같은 기본 생성자를 생성한다.
public 자식 클래스명(){
super();
}
기본 생성자를 추가해주는 것은 앞에서 정리한 내용이라 익숙한데 super()라는 코드가 새롭게 추가된 것을 볼 수 있다.
자바 컴파일러는 부모 클래스의 생성자를 명시적으로 호출하지 않는 모든 자식 클래스의 생성자 첫 줄에
자동으로 super()를 추가하여, 부모 클래스의 멤버를 초기화할 수 있도록 해준다.
만약 직접 자식 생성자를 선언하고 명시적으로 부모 생성자를 호출하고 싶다면 아래와 같이 작성하면 된다.
자식 클래스명(매개변수1, 매개변수2, ...){
super(부모 생성자의 매개변수1, 부모 생성자의 매개변수2);
...
}
여기서 중요한 점은 super()는 반드시 자식 생성자 첫 줄에 위치해야 한다는 점이다.
아래의 예제 코드를 보고 넘어가도록 하자.
public class People {
public String name;
public String addr;
public People(String name, String addr) {
this.name = name;
this.addr = addr;
}
}
public class Student extends People{
public int studentNo;
public Student(String name, String addr, int studentNo) {
super(name,addr); // 부모의 기본 생성자 호출
this.studentNo = studentNo;
}
}
public class StudentApp {
public static void main(String[] args) {
Student student = new Student("홍길동", "서울",1);
System.out.println("name : " + student.name);
System.out.println("addr : " + student.addr);
System.out.println("studentNo : " + student.studentNo);
}
}
// 결과
name : 홍길동
addr : 서울
studentNo : 1
부모 메소드를 호출하는 super
자식 클래스에서 메소드를 재정의하면 부모 객체의 메소드가 아니라
재정의된 자식 메소드가 사용된다고 오버라이딩할 때 말했었다.
자식 클래스 내부에서 부모 클래스의 메소드를 호출해야 한다면
아래와 같이 super를 사용하여 부모 메소드를 호출할 수 있다.
super.부모 메소드명();
public class WalkPeople {
public void walk() {
System.out.println("걷고 있습니다.");
}
public void drink() {
System.out.println("음료를 마십니다.");
}
public void rest() {
System.out.println("쉬고 있습니다.");
}
}
public class RunPeople extends WalkPeople {
public static final int WALK = 1;
public static final int RUN = 2;
public int now = 1;
// 메소드 오버라이딩(재정의)
@Override
public void walk() {
if(now == RUN) {
System.out.println("달리고 있습니다.");
}else {
super.walk();
}
}
}
public class PeopleApp {
public static void main(String[] args) {
RunPeople rp = new RunPeople();
rp.walk();
rp.drink();
rp.now = RunPeople.RUN; // static은 객체를 생성하지 않고 사용한다.
rp.walk();
rp.rest();
}
}
// 결과
걷고 있습니다.
음료를 마십니다.
달리고 있습니다.
쉬고 있습니다.
728x90
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] 인터페이스 (+ 다운 캐스팅) (0) | 2023.05.16 |
---|---|
[JAVA] abstract 추상 클래스와 추상 메소드 (+ 업캐스팅) (1) | 2023.05.15 |
MVC란 무엇일까? 또, DAO와 DTO, VO는 무엇일까? (0) | 2023.05.14 |
[JAVA] 게터(getter)와 세터(setter) (0) | 2023.05.14 |
[JAVA] 접근 제한자 (0) | 2023.05.13 |