100세까지 코딩
[자바 공부] 상속과 바인딩 본문
문제
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++에서는 모두 정적 바인딩을 한다.
'JAVA' 카테고리의 다른 글
[자바 공부] Arrays 메서드 정리 (0) | 2023.09.08 |
---|---|
[자바 공부] 형 변환 함수 차이 (parseXXX, valueOf, toString) (0) | 2023.09.04 |
[자바 공부] 문자열 (String, StringBuffer, StringBuilder) (0) | 2023.09.02 |
[자바 공부] 상속 & 생성자 (정처기 문제) (0) | 2023.08.10 |
[자바 공부] 문자열 비교 (정처기 문제) (0) | 2023.08.08 |