자바 this 설명 - jaba this seolmyeong

그만큼 this 키워드는 현재 클래스의 참조를 가리키는 반면 super 키워드는 부모 클래스의 참조를 가리킵니다. this 현재 클래스의 변수 및 메서드에 액세스하는 데 사용할 수 있습니다. super 하위 클래스에서 상위 클래스의 변수와 메서드에 액세스하는 데 사용할 수 있습니다.

부터 this 그리고 super 키워드는 객체의 인스턴스와 관련이 있으므로 정적 블록이나 정적 메서드 내에서 사용할 수 없습니다. 그렇게 하지 않으면 컴파일 오류가 발생합니다. 정적 컨텍스트에서 참조할 수 없는 비정적 콘텐츠.

 
그만큼 this 키워드는 일반적으로 아래와 같이 메서드의 매개변수에 의해 인스턴스 변수가 가려질 때 사용됩니다.

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

class A

{

    public int x = 0;

    public int y = 0;

}

 

class B extends A

{

    public int x, y;

 

    // 인스턴스 변수 `x`, `y`는 생성자의 매개변수에 의해 가려집니다.

    B(int x, int y)

    {

        this.x = x;

        this.y = y;

    }

 

    void print()

    {

        System.out.println("Base class  : {" + x + ", " + y + "}");

        System.out.println("Super class: {" + super.x + ", " + super.y + "}");

    }

}

 

class Main

{

    public static void main(String[] args)

    {

        B obj = new B(1, 2);

        obj.print();

    }

}

다운로드  코드 실행

결과:

Base class : {1, 2}
Super class: {0, 0}

 
그만큼 super 키워드는 부모 클래스의 비공개가 아닌(공개, 보호 또는 기본) 메서드 및 변수에 대한 액세스를 허용합니다. 그러나 하위 클래스 내에서 상위 클래스의 private 멤버에 액세스하는 것은 불가능합니다.

그만큼 super 키워드는 클래스가 부모 클래스의 메서드를 재정의하고 재정의된 메서드를 호출해야 할 때 유용합니다. 이것은 다음을 사용하여 수행할 수 있습니다. super. 이것은 아래에 설명되어 있습니다.

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

class Vehicle

{

    public void drive() {

        System.out.println("Driving a Vehicle");

    }

}

 

class Car extends Vehicle

{

    @Override

    public void drive() {

        System.out.println("Driving a Car");

    }

 

    public void driveParent() {

        super.drive();

    }

}

 

class Main

{

    public static void main(String[] args)

    {

        Car c = new Car();

        c.drive();

        c.driveParent();

    }

}

다운로드  코드 실행

결과:

Driving a Car
Driving a Vehicle

2. 사용 this()super() 방법

전화 this() 생성자 내에서 메서드가 현재 클래스에 정의된 다른 생성자를 호출합니다. 이것이 작동하려면 재귀 생성자 호출이 허용되지 않으므로 생성자를 오버로드해야 합니다. 반면에, super() 부모 클래스에 정의된 생성자를 호출합니다.

우리는 부를 수 없다 this() 그리고 super() 생성자 본문 외부의 메서드. 또한 다음 중 하나를 호출하면 this() 또는 super() 생성자 본문의 첫 번째 줄이어야 합니다. 이것은 또한 동일한 생성자 내에서 두 메서드를 동시에 호출할 수 없음을 의미합니다.