저번 게시글에서는 상속의 기본 개념, 오버라이딩, 생성자 호출, 다형성에 대해서 알아보았습니다. 오늘은 이어서 자바 상속에서의 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에 넘겨준 파라미터에 따라 다른 결과값이 출력되는 것을 볼 수 있습니다.
'Languages > JAVA' 카테고리의 다른 글
[JAVA] JFrame 사용해보기 #2 - DB 연동 (DTO, DAO) (0) | 2021.11.17 |
---|---|
[JAVA] JFrame 사용해보기 #1 - 예제로 다양한 기능 알아보기 (0) | 2021.11.16 |
[JAVA] 상속 알아보기 #1 - 기본 개념, 오버라이딩, 생성자 호출, 다형성 (0) | 2021.11.15 |
[JAVA] JDBC 사용해보기 #3 - DTO, DAO와 같이 사용해보기 ( Select, Insert, Update, Delete ) (1) | 2021.11.12 |
[JAVA] DTO vs DAO vs VO 개념 정리 (0) | 2021.11.12 |