본문 바로가기

JAVA/복습

오버라이딩(Overriding)

오버라이딩(Overriding)

부모가 가지고 있는 메소드와 똑같은 모양의 메소드를 자식이 가지고 있는 것.

즉. 오버라이딩이란 메소드를 재정의 하는 것이다.

 

부모가 물려준 기능이 내가 필요하기는 하지만 그 기능을 그대로 사용하는 게 별로 좋지 않을 때.

부모가 물려준 메소드를 자식이 다시 정의해서 사용하는 것을 오버라이딩이라 한다.

 

요약. 부모클래스의 메소드를 자식클래스에서 재정의하여 사용하는 것


메소드 오버라이딩  

  Car 클래스를 상속받은 Bus 클래스는 부모클래스가 가진고 있는 run() 메소드를 잘 사용한다.

 

Car5.java(부모클래스)

   //run 메소드를 가지고 있는  Car클래스 
    public class Car5{
        public void run(){
            System.out.println("Car5의 run메소드");
        }
    }

 

Bus1.java(자식클래스)

package Java02;

public class Bus1 extends Car5{

}

 

BusExam01.java

package Java02;

public class BusExam01 {

    public static void main(String[] args) {

        Bus1 bus = new Bus1();
        bus.run();
    }
}

 

실행결과

 

Bus1이라는 클래스는 아무런 메소드도 가지고 있지 않기 때문에 

Car5 , 부모로부터  물려받은 run() 가 실행되고 있는 것을 알 수 있다.

 


그렇다면,  Bus1클래스가 부모가 가지고 있는 메소드와  똑같은 모양의 메소드를 선언한다면?

 

Car5.java

    public class Car5{
        public void run(){
            System.out.println("Car5의 run메소드");
        }
    }

 

Bus1.java

package Java02;

public class Bus1 extends Car5{

    public void run(){
        System.out.println("Bus1의 run메소드");
    }
}

 

BusExam01.java

package Java02;

public class BusExam01 {

    public static void main(String[] args) {

        Bus1 bus = new Bus1();
        bus.run();
    }
}

 

-- 실행결과

 

실행결과 "Bus1의 run메소드"가 출력된다.

 

실행해보니 부모가 갖고 있었던 run메소드는 실행되지 않고, 자식이 새로 정의해놓은 run메소드가 실행된 것이다.

부모의 메소드와 동일한 메소드를 자식이 재정의해서 올라가 있는 형태라는 의미

하지만, 오버라이딩한다 해서 부모의 메소드가 아예 사라지는 것은 아니다.


만약, 나는 부모가 물려준 run메소드를 아예 안쓰고 싶지않아요. 그 메소드 그대로 수행을 하는데 특정한 부분만 추가시키고 싶다면? 

 

이를 위해 여기서 그대로 run메소드를 호출하면 자식이 가진 run메소드만 호출 된다.

 

이럴 때 super 키워드를 활용하면 부모의 메소드를 호출할 수 있다.

명시적으로 호출을 하여 부모가 가진  run메소드를 실행.

super.부모가 갖고 있는 메소드;

 

 

Bus1.java

package Java02;

public class Bus1 extends Car5{

    public void run(){

        //부모의  run()메소드를 호출 
        super.run(); 
        System.out.println("Bus1의 run메소드");
    }

}

 

-- 실행결과

 

실행 결과 Car5의 메소드 -> Bus1의 메소드가 차례로 실행되는 것을 알 수 있다.

 

 

이를 통해서 확인할 수 있는 2가지?

 

1. super를 이용하면 자식클래스에서 부모의 메소드를 호출할 수 있다는 것을 알 수 있다.

 

2. 부모의 메소드가 사라지지 않는다는 것을 알 수 있다.

'JAVA > 복습' 카테고리의 다른 글

[프로그래머스] 클래스형변환 실습(2)  (0) 2021.10.11
클래스형변환  (0) 2021.10.11
super & 부모생성자  (0) 2021.10.11
추상클래스  (0) 2021.10.11
접근제한자  (0) 2021.10.11