java

상속

주다애 2023. 7. 8. 18:20

본 게시물은 프로그래머스 FOO님의 실무 자바 개발을 위한 OOP와 핵심 디자인 패턴을 듣고 작성된 게시물입니다.

 

public class Parent {
    public int parentPublicInt;
    protected int parentProtectedInt;
    private int parentPrivateInt;

    public void someMethod() {
        System.out.println("Parent someMethod");
    }
}

 

public class Child extends Parent {
    public void anotherMethod() {
        System.out.println("Child anotherMethod");

        this.parentProtectedInt = 0;
        this.parentPublicInt = 0;
//        this.parentPrivateInt = 0;    // 상속 되지 않았기 때문에 불가능!
    }

    // 어노테이션은 필수는 아니지만 실수 방지를 위해 해놓는 것이 좋다.
    @Override
    public void someMethod() {
        System.out.println("Child someMethod");
    }
}

Child 클래스가 Parent 클래스를 상속(extends)받았다.

상속을 받으면 자식 클래스는 부모 클래스의 필드와 메서드에 접근이 가능하다.

단, 부모 클래스의 필드나 메서드의 접근 제어자가 private일 때는 상속이 불가하다!

 

🤔 오버라이딩

오버라이딩(Overriding)이란 자식 클래스에서 부모 클래스의 메서드를 상속받아서 재정의하는 것을 의미한다.

주의할 것은 메서드의 시그니처는 모두 같아야한다.(메서드 이름, 반환 타입, 매개변수 등)

// 어노테이션은 필수는 아니지만 실수 방지를 위해 해놓는 것이 좋다.
    @Override
    public void someMethod() {
        System.out.println("Child someMethod");
    }

@Override 어노테이션은 의무는 아니다.

하지만, 부모 클래스의 메서드를 상속받았다는 것을 알려주고 실수 방지를 위해서 사용하는 것이 좋다.

 

🤔 오버로딩

오버로딩(Overloading)은 동일한 메서드 이름으로 파라미터, 리턴 타입이 다른 메서드를 여러 개 정의하는 것을 의미한다.

주의할 것은 리턴 타입만 다르게 하여 오버로딩하는 것은 불가하다.

    public int add(int num1, int num2) {
        return num1 + num2;
    }

//    return 타입만 다르게 오버로딩은 불가능
   public long add(int num1, int num2) {
       return num1 + num2;
   } --> 불가

 

'java' 카테고리의 다른 글

동일성 vs 동등성  (0) 2023.08.17
stream API + Optional  (0) 2023.07.15
stream API  (0) 2023.07.10
람다식  (0) 2023.07.09
Optional  (0) 2023.07.09