자바 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() 생성자 본문의 첫 번째 줄이어야 합니다. 이것은 또한 동일한 생성자 내에서 두 메서드를 동시에 호출할 수 없음을 의미합니다.

Toplist

최신 우편물

태그