Study/Java

Java - 상속_ 재정의 (Override)

서한성 2022. 7. 6. 12:17

상속에서 method를 활용하는 방법 중 Override를 알아보자

 

예시)

부모 클래스

public class Parent {
    //    필드
    int field1;
    //    생성자(default - 생략 가능)
    public Parent() {}
    //    메소드
    void method1() { System.out.println("method1이 실행됨"); }
    void method2() { System.out.println("method2가 실행됨"); }
}

자식클래스 -> method1은 Override하고 method2는 하지 않는다.

public class Child extends Parent {
    //    필드
    int field2;
    //    메소드 추가
    @Override
    void method1() {
        super.method1();
        System.out.println("method1 Override");
    }
    void method2() { System.out.println("method2 not Override"); }
}

위와 같이 method1은 Override어노테이션과 super키워드를 통해 Parent.method1을 Override 했고

method2는 이런 것들을 쓰지 않는다.

결과는 어떨까?

 

public class InheritanceExample {
    public static void main(String[] args) {
        Parent p1 = new Parent();
        p1.method1();
        
        System.out.println("\n");
        System.out.println("ChildExample");	//	구분을 위해 한 줄 띄움
        
        Child c1 = new Child();
        c1.method1();   //  p1.method1()에 Child 클래스에서 추가한 것이 모두 실행됨 -> Override
        c1.method2();   //  Child 클래스의 메소드만 실행
    }
}

 

Child 객체에서 호출한 method1은 Parent 객체의 method1과 override한 실행문이 모두 실행되고,

method2는 Child 객체에서 호출한 메소드만 실행됐다.

 

정리하면 override는 둘 다, 하지 않으면 자식 것만!! 이라고 하면 될 듯 하다.