본문 바로가기

Languages/JAVA

[JAVA] 상속 알아보기 #2 - this, super

저번 게시글에서는 상속의 기본 개념, 오버라이딩, 생성자 호출, 다형성에 대해서 알아보았습니다. 오늘은 이어서 자바 상속에서의 this, super의 차이점을 알아보겠습니다.

 

지난 게시글을 볼려면 여기를 클릭해주세요 -- > [JAVA] 상속 알아보기 #1 - 기본 개념, 오버라이딩, 생성자 호출, 다형성

 


예시를 보면서 이해해봅시다.

 

Phone 클래스를 HandPhone 클래스가 상속받는 예제입니다. 저번 게시글에서 모든 클래스는 Object를 상속받고 있다 했으므로 가장 최상단의 Phone 클래스가 Object를 상속받고있는 구조입니다.

 

Object <- Phone <- HandPhone 


 

Phone.java

package test.mypac;

public class Phone {
	public Phone() {
		// TODO Auto-generated constructor stub
		System.out.println("Phone() 생성자");
	}
	//전화 거는 메소드
	public void call() {
		System.out.println("전화를 걸어요");
	}
	
}

HandPhone.java

package test.mypac;

//Phone 클래스를 확장해서 HandPhone 클래스를 정의한다.
//Phone 클래스를 상속 받아서 자식클래서 HandPhone을 정의한다.
public class HandPhone extends Phone{
	public HandPhone() {
		// TODO Auto-generated constructor stub
		System.out.println("HandPhone() 생성자");
	}

	//이동중에 전화를 거는 메소드
	public void mobileCall() {
		System.out.println("이동중에 전화를 걸어요!");
	}
	//사진 찍는 메소드
	public void takePicture() {
		System.out.println("30만 화소의 사진을 찍어요");
	}
	
}

 


 

this - 자기 자신의 참조 값을 가르킵니다.
super - 부모 객체의 참조 값을 가르킵니다.

 

 

Object <- Phone <- HandPhone 이므로,

Phone의 super는 Object, HandPhone super는 Phone 입니다.


이제 다른 예제를 봅시다.

 

Animal.java

package test.auto;

public class Animal {
	private String name;

	public Animal() {
		this.name = name;
		System.out.println("Animal() 생성자 호출됨");
	}
	
	
	public Animal(String name) {
		this.name = name;
		System.out.println("Animal(String name) 생성자 호출됨, name : "+this.name);
	}
	
	
}

 

Dog.java

package test.auto;

public class Dog extends Animal {
	private String name;

	public Dog() {
		super();
		this.name = name;
		System.out.println("Dog() 생성자 호출됨");
	}
	
	
	public Dog(String name) {
		super(name);
		this.name = name;
		System.out.println("Dog(String name) 생성자 호출됨, name : "+ this.name);
	}
	
	
}

 

Dog 클래스가 Animal 클래스를 상속하고 있습니다. 클래스안에는 생성자가 name을 인자로 받은 것과 받지않은 것 이렇게 2가지로 생성되고 있습니다.


 

1.

Dog dog = new Dog();

 

2.

Animal animal = new Animal();

 

3.

Animal animal = new Dog();

 

4.

Animal animal = new Dog("해피");

 

이렇게 super에 넘겨준 파라미터에 따라 다른 결과값이 출력되는 것을 볼 수 있습니다.