[SEB BE] Section 1.상속 - 오버라이딩, super, super()

박두팔이·2022년 12월 29일
0

자바

목록 보기
9/26

메서드 오버라이딩

영단어 override의 사전적 의미가 "~위에 덮어쓰다"를 의미한다는 것을 생각하면 메서드 오버라이딩을 이해하기 쉽다.

  • 메서드 시그니처(반환타입, 메서드이름, 매개변수)가 상위클래스의 메서드와 같아야 한다.
  • 접근제어자의 범위는 상위클래스의 메서드보다 같거나 넓어야 한다.
  • 예외는 상위클래스의 메서드보다 많이 선언할 수 없다.
class Vehicle {
    void run() {
        System.out.println("Vehicle is running");
    }
}

public class Bike extends Vehicle { // Vehicle 클래스 상속
    void run() {
        System.out.println("Bike is running"); // 메서드 오버라이딩
    }

    public static void main(String[] args) {
        Bike bike = new Bike();
        bike.run();
    }
}

// 출력값
"Bike is running"

메서드 오버라이딩을 사용하는 이유?

상위클래스의 멤버를 상속받아 자신에게 맞는 방식으로 메서드를 재구성 할 수 있다.

모든 객체를 상위클래스타입 하나로 선언하면 배열로 선언하여 관리할 수 있다는 편리성이 있다.

// 배열로 한번에 관리하기

Vehicle[] vehicles = new Vehicle[] { new Bike(), new Car(), new MotorBike()};
for (Vehicle vehicle : vehicles) {
		vehicle.run();
}

// 출력값
Bike is running
Car is running
MotorBike is running

super, super()

  • this : 자기 객체를 가리키는 참조변수명이다. 메서드 내에서 멤버변수와 지역변수의 이름이 같을 때 구분하기 위한 용도로 사용된다. 지역변수와 멤버변수의 이름이 같을 때 .this를 붙이면 this는 멤버변수를 가리킨다.
  • this() : this()메서드는 같은 클래스에 있는 다른 생성자를 호출할 때 사용되며 생성자 내에서만 사용이 가능하고 항상 첫 줄에 위치해야 한다.
  • 한마디로 정리하면 this는 자신의 객체, this()메서드는 자신의 생성자 호출을 의미한다.

this는 자기멤버를, super는 상위클래스 멤버를 의미한다.

super()메서드도 this()메서드처럼 생성자를 호출할 때 사용한다.
this()는 같은 클래스의 다른 생성자를 호출하는데 사용하지만 super()는 상위클래스의 생성자를 호출하는데 사용된다.

public class Test {
    public static void main(String[] args) {
        Student s = new Student();
    }
}

class Human {
    Human() {
        System.out.println("휴먼 클래스 생성자");
    }
}

class Student extends Human { // Human 클래스로부터 상속
    Student() {    
        super(); // Human 클래스의 생성자 호출
        System.out.println("학생 클래스 생성자");
    }
}

// 출력값
휴먼 클래스 생성자
학생 클래스 생성자

super() 메서드 또한 this()와 마찬가지로 생성자 안에서만 사용가능하고, 반드시 첫 줄에 와야한다.

profile
기억을 위한 기록 :>

0개의 댓글