1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class referenceParamEx2 {
 
    public static void main(String[] args) {
        int[] x = new int[] { 10 };
        System.out.println("메인 메소드의 소환-->main():X=" + x[0]);
 
        change(x);
        System.out.println("메소드 소환후-->After change(x)");
        System.out.println("최종 메인 메소드-->main():X=" + x[0]);
    }
 
    static void change(int[] x) {
        x[0= 1000;
        System.out.println("메소드 소환--> change():X=" + x[0]);
    }
}
 
cs


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
class Data {
    int x;
}
 
class ReferenceParamEx {
    public static void main(String[] args) {
        // 항상 시작은 main부터 시작이 되며 Data타입이 존재하기 때문에 상단의 class가 Data가 존재해야 한다.
        // 이후 Data 클래스 안의 멤버변수안에 접근이 가능하다.
        // 멤버변수의 접근은 참조변수의 경우 인스턴스를 생성후에 접근을 해야 한다.
        // d.x를 통해 x의 값이 10으로 설정을 한다.
        // 이후 change()의 메소드를 실행하는데 자연스럽게 satic이 붙은 메소드가 실행이 되며 d.x=1000을 통해 전역변수의 
        //d.x의 값은 1000이 된다. 여기서 전역변수란 어디에서든지 접근이 가능하다는 소리임
        // 이후 change의 소환이 void로 반환이 안된상태에서 종료가 되고 이후 After가 소환이 된다.
        //최종적으로 main이 소환이 되며 d.x의 값은 기존의 1000이 출력되면서 종료하게 된다.
        Data d = new Data();
        d.x = 10;
        System.out.println("main():X=" + d.x);
 
        change(d);
        System.out.println("After change(d)");
        System.out.println("main():X=" + d.x);
    }
 
    static void change(Data d) {
        d.x = 1000;
        System.out.println("change():X=" + d.x);
    }
}
 
cs


'23.12.24 삭제예정 > 자바' 카테고리의 다른 글

기본형 매개변수와 참조형 매개변수의 차이점  (0) 2017.05.29
배열 메소드의 소환  (0) 2017.05.25
Super()-조상 클래스의 생성자  (0) 2017.05.01
오버라이딩의 조건  (0) 2017.05.01
자바-생성자  (0) 2017.04.27

Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자 this() 또는 super()를 호출해야 한다. 그렇지 않으면 컴파일러가 자동적으로 super()를 생성자의 첫 줄에 삽입한다. 


인스턴스를 생성 할때는 클래스를 선택하는 것만큼 생성자를 선택하는 것도 중요한 일이다. 


1.클래스- 어떤 클래스의 인스턴스를 생성할 것인가?

2. 생성자- 선택한 클래스의 어떤 생성자를 이용해서 인스턴스를 생성할 것인가?

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
class PointTest2 {
    public static void main(String[] args) {
        Point3D p3 = new Point3D();
        System.out.println("p3.x=" + p3.x);
        System.out.println("p3.y=" + p3.y);
        System.out.println("p3.z=" + p3.z);
    }
}
 
class Point {
    int x = 10;
    int y = 20;
 
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
 
class Point3D extends Point {
    int z = 30;
 
    Point3D() {
        this(100200300);
    }
 
    Point3D(int x, int y, int z) {
        super(x, y);
        this.z = z;
    }
}
cs


'23.12.24 삭제예정 > 자바' 카테고리의 다른 글

배열 메소드의 소환  (0) 2017.05.25
기본형 매개변수 VS 참조형 매개변수  (0) 2017.05.25
오버라이딩의 조건  (0) 2017.05.01
자바-생성자  (0) 2017.04.27
자바-오버로딩에 관해서  (0) 2017.04.24

오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다.

그래서 오버라이딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다.


자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 

-이름이 같아야 한다.

-매개변수가 같아야 한다.

-변환타입이 같아야 한다.


한마디로 요약하면 선언부가 서로 일치해야 한다는 것이다. 다만 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다.


1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다.


2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

+ Recent posts