반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package PM;
//+하위 객체가 만들어 질때 먼저 상위 객체의 필드와 메소드가 메모리에 올라가고 생성자 호출후
//하위 객체의 필드와 메소드가 따라 올라가고 생성자가 호출된다.
class Dypar{
int a = initA(); //애는 일반이라 공간먼저 받고 이후에 값을 가져온다.
static int sa = initSA(); //static은 공간과 값을 처음에 다 가져온다.
Dypar(int a , String c) {
System.out.println("부모생성자 "+a+","+c);
}
int initA() {
System.out.println("부모 initA()");
return 10;
}
static int initSA() {
System.out.println("static 부모 initSA()");
return 100;
}
}
class DyChild extends Dypar{
int b = initB();
static int sb = initSB();
int d = 400;
public DyChild(int a , String c, int b) { //아래 super 3개는 정적으로 부모 생성자에 자식 생성자가 값을 정해 넣어준것
//근데 자식도 그 값을 외부에서 받아와서 부모생성자에 넣어주고자 하면
// DyChild()안에 int a , String c를 넣어 받아오게 일치시켜주고
// (super a, c )로 해준다)
// super(123, "아기상어");
// super(b, "아기상어"); //불가능
// super(sb, "아기상어"); //가능 sb가 static 이기때문에 부모의 생성자에 들어갈 수 있다ㅣ .
super(a,c);
this.b = b;
System.out.println("자식생성자");
}
int initA() { ///오버라이딩
System.out.println("자식 initA() 오버라이딩:"+d);
return d;
}
int initB() {
System.out.println("자식 initB()");
return 20;
}
static int initSB() {
System.out.println("static 자식 initSB");
return 200;
}
}
public class DyLifeCycleMain {
public static void main(String[] args) {
DyChild cc = new DyChild(999,"엄마상어",888);
System.out.println(cc.a);
cc.initA();
}
}
|
cs |
결과
static 부모 initSA()
static 자식 initSB
자식 initA() 오버라이딩:0
부모생성자 999,엄마상어
자식 initB()
자식생성자
0
자식 initA() 오버라이딩:400
==============================
cc.a 의 호출결과는 d에 값이 들어가기전 호출이며, cc. initA()는 d에 값이 들어간 후의 호출되어 다른값이 나왔다.
cc.a는 0이지 null이 아니다 .(차이점 인지하기)
반응형
'JAVA' 카테고리의 다른 글
java/ to String 주소값 출력 값 출력으로 오버라이드 하기 (0) | 2020.09.03 |
---|---|
Object Class /equals() /== (0) | 2020.09.02 |
자바/상속 클래스들의 호출 순서 (0) | 2020.08.30 |
상속 /다형성 /메소드 오버라이드 (0) | 2020.08.28 |
배열1 /선언/생성/길이/인덱스/초기화 (0) | 2020.08.14 |