관리 메뉴

100세까지 코딩

[자바 공부] 상속과 바인딩 본문

JAVA

[자바 공부] 상속과 바인딩

100세까지 코딩 2023. 8. 12. 14:29
문제
public class Main {
    public static void main(String[] args) {
        A test = new B();
        
        System.out.println(test.X);
        test.func1();
    }
}

class A {
    public int X = 500;

    public void func1() {
        System.out.println("클래스 A입니다.");
    }
}

class B extends A {
    public int X = 1000;

    public void func1() {
        System.out.println("클래스 B입니다.");
    }
}
풀기 전 생각
  • 1000, 클래스 B입니다. 가 출력될 것이라고 생각
  • 정보처리기사 공부할 때 동적 바인딩만 나왔고 다 맞았었기 때문
풀이
자바에서 필드는 정적 바인딩, 메서드는 동적 바인딩
즉, X는 A의 X를 의미하며 test.func1()의 호출은 B의 func1()를 의미

 

정답

추가 문제

 

- 정적 필드와 정적 메서드는 어느 시기에 결정될까?

public class Main {
    public static void main(String[] args) {
        A test = new B();

        System.out.println(test.X);
        test.func1();
    }
}

class A {
    public static int X = 500;

    public static void func1() {
        System.out.println("클래스 A입니다.");
    }
}

class B extends A {
    public static int X = 1000;

    public static void func1() {
        System.out.println("클래스 B입니다.");
    }
}

 

정답
더보기

500
클래스 A입니다.

 

참고
1. 정적 바인딩이란 ? 
    - 컴파일 시에 타입을 보고 결정하는 것
2. 동적 바인딩이란 ?
    - 실행 시에 실제 저장된 객체의 타입에 따라 결정하는 것
3. C++에서는 모두 정적 바인딩을 한다.