Java

[인프런] 상속과 접근 제어

sejin2 2024. 5. 27. 14:15

UML 표기법

  • + : public
  • # : protected
  • ~ : default
  • - : private

접근 제어자의 종류

  • private : 모든 외부 호출을 막는다.
  • default : 같은 패키지 안에서 호출은 허용한다.
  • protected : 같은 패키지 안에서 호출은 허용한다. 패키지가 달라도 상속 관계의 호출은 허용한다.
  • public : 모든 외부 호출을 허용한다. 
public class Parent {

    public int publicValue;
    protected int protectedValue;
    int defaultValue;
    private int privateValue;

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

    protected void protectedMethod() {
        System.out.println("Parent.protectedMethod");
    }

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

    private void privateMethod() {
        System.out.println("Parent.privateMethod");
    }

    public void printParent() {
        System.out.println("==Parent 메서드 안==");
        System.out.println("publicValue = " + publicValue);
        System.out.println("protectedValue = " + protectedValue);
        System.out.println("defaultValue = " + defaultValue);
        System.out.println("privateValue = " + privateValue);

        // 부모 메서드 안에서 모두 접근 가능
        defaultMethod();
        privateMethod();
    }
}
public class Child extends Parent {

    public void call() {
        publicValue = 1;
        protectedValue = 1; // 상속 관계 or 같은 패키지
        // defaultValue = 1; // 다른 패키지에 접근 불가 -> 컴파일 오류
        // privateValue = 1; // 접근 불가 -> 컴파일 오류

        publicMethod();
        protectedMethod(); // 상속 관계 or 같은 패키지
        // defaultMethod(); // 다른 패키지에 접근 불가 -> 컴파일 오류
        // privateMethod();  // 접근 불가 -> 컴파일 오류

        printParent();
    }
}
public class ExtendsAccessMain {
    public static void main(String[] args) {
        Child child = new Child();
        child.call();
    }
}

접근 제어자와 메모리 구조

본인 타입에 없으면 부모 타입에서 기능을 찾는데, 이때 접근 제어자가 영향을 준다. 객체 내부에서는 자식과 부모가 구분되어 있기 때문이다. 자식 타입에서 부모 타입의 기능을 호출할 때 부모 입장에서 보면 외부에서 호출한 것과 같다. 

 

 

공부 내용: [인프런] 김영한의 실전 자바 - 기본편

'Java' 카테고리의 다른 글

[인프런] 다형성  (0) 2024.05.27
[인프런] super  (0) 2024.05.27
[인프런] 상속과 메서드 오버라이딩  (0) 2024.05.27
[인프런] 상속  (0) 2024.05.27
[인프런] final 변수와 상수  (0) 2024.05.27