본문 바로가기
Web

[Java] this와 super

by DuncanKim 2022. 6. 15.
728x90

[Java] this와 super

this와 super.

많이 보긴하는데, 헷갈릴 때가 있다.

또한 this와 this(), super와 super()의 차이.

더 상세하게 알아보고 기억하기 위해 기록한다.

 

아래의 코드는 정보관리 시스템을 할 때 사용한 코드이다.

2022.06.13 - [프로그래밍 언어/Java] - [Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기

	public Student(String name, int age, int height, int weight, String studentId, int grade, double gPA) {
		//상속받은 클래스의 매개변수를 가진 super 생성됨.
		super(name, age, height, weight);
		this.studentId = studentId;
		this.grade = grade;
		this.GPA = gPA;
	}

이 코드를 중심으로 super와 this를 좀 더 살펴보겠다.

 

1. this, this()


  • this : 현재 클래스의 인스턴스(나)를 의미한다. 즉, 현재클래스의 멤버변수를 지정할 때 사용한다.

생성자의 매개변수로 선언된 변수의 이름이 인스턴스 변수와 같을 때 인스턴스 변수와 지역변수를 구분하기 위해서 사용한다.

위의 코드에서는 this.studentId = studentId;를 통해 알 수 있다.

무엇인가를 통해 받아들인 코드의 String StudentId를 통해 새로운 변수를 받게 된다.

그것을 현재의 멤버변수로 설정하기 위해 this. 을 쓰는 것이다.

 

+

static 메서드에서는 this를 사용하지 못한다.

 

  • this() :  같은 클래스의 다른 생성자를 호출할 때 사용한다.
    Car(){
        this("white", "auto", 4); // Car(String color, string gearType, int door)를 호출
    }
    
    Car(String color){
        this(color, "auto", 4);
    }
    
    Car(String color, String gearType, int door){
        this.color = color; 
        this.gearType = gearType;
        this.door = door;
    }

맨 아래의 생성자가 있는데, 그것을 중심으로, 위의 두 개의 생성자가 맨 밑의 생성자를 호출하는 것이다.

두 번째 생성자는 String color 만을 매개변수로 받아 color만 다르게 입력할 수 있도록 하고 있다.

 

 

2. super, super()


  • super : 자식 클래스에서 부모 클래스의 멤버를 참조할때 사용한다.

예를 들어, 오버라이딩을 했지만, 부모 클래스의 메소드를 한 번 쓰고 싶을 때,

super.메소드();를 하게 되면, 그 라인만은 부모 메소드를 참조하여 연산을 하게 된다.

 


  • super() : 자식 클래스가 자신을 생성할 때 부모 클래스의 생성자를 불러 초기화 할때 사용한다.

	public Student(String name, int age, int height, int weight, String studentId, int grade, double gPA) {
		//상속받은 클래스의 매개변수를 가진 super 생성됨.
		super(name, age, height, weight);
		this.studentId = studentId;
		this.grade = grade;
		this.GPA = gPA;
	}

이것을 다시보면, name, age, height, weight는 부모의 매개변수이다.

이를 불러 자식 클래스에서 초기화 한 것이다.

 

이것을 참고하고, 나머지 새로운 studentId, grade, GPA만 this.로 받는 것을 알 수 있다.

 

728x90

'Web' 카테고리의 다른 글

[HTML/CSS] HTML 태그 모음  (0) 2022.06.15
[HTML/CSS] HTML/CSS란?  (0) 2022.06.15
[Java] Overloading, Overriding  (0) 2022.06.15
[Java] 다형성(Polymorphism) 알아보기  (0) 2022.06.13
[Java] 추상, 인터페이스  (0) 2022.06.13

댓글