class X{
int i;
X(){
i = 10;
}
void print(){
print(i + ",");
}
}
class Y extends X{
int i = 15;
int j = 10;
Y(){
j = 20;
}
void print(){
print(j+",");
}
void superprint(){
super.print();
}
}
class Z extends Y{
int k;
Z(){
super();
k = 30;
}
void print(){
print(k+",");
}
void test(){
print();
super.superprint();
print(super.j+",");
println(i);
}
}
Z z = new Z();
z.test();
z()를 실행하기전, z는 상속관계이므로 명시적으로 부모를 부르는지 확인해야 함,
super()가 있으므로 아버지인 y의 디폴트생성자로 이동
y클래스의 디폴트생성자로 왔는데 여기서도 명시적으로 아버지의 부모를 부르는지 확인해야 함
명시적인 사항이 없으므로 묵시적으로 부모의 디폴트 생성자 출력해야 함
아버지의 부모인 할아버지 x로 이동, x에서 i = 10
다시 y클래스의 y()로 돌아와서 j=20인걸 확인, 그럼 y클래스의 j=20으로 바꿔줘야함
정리하자면 객체 z 이렇게 들어가 있음
클래스 | 변수 | 값 |
x | i | 10 |
y | i | 15 |
y | j | |
z | k | 30 |
그다음 z.test() 실행해야 함
print();
print함수로 이동해서 30, 출력
super.superprint();
아버지 y에서 superprint함수 실행, super.print() 이므로 할아버지 x에서 print()실행하면 10, 출력
print(super.j+",");
아버지 y에서 j실행하면 20,
println(i);
i로 출력하라 했는데, 나랑 가까운 i를 출력하면 됨, 아버지 y가 가장 나(z)랑 가까움 따라서 15출력
답은 30,10,20,15
'언어 > JAVA' 카테고리의 다른 글
흥달쌤 영상답변 문제 모음 (0) | 2022.10.14 |
---|---|
[JAVA] static 변수(정적 변수) + 지역변수, 전역변수 (0) | 2022.09.23 |
변수 자료형 (0) | 2022.09.16 |
[JAVA] 추상 클래스, 추상 메소드 (0) | 2022.07.12 |
[JAVA] 클래스, 상속, 생성자 (0) | 2022.07.12 |
댓글