자바의 상속에 대해서 알아봅시다.
상속은 단어 그대로 자식이 부모로부터 어떤 것을 물려받는 것입니다.
자바에서의 상속은 부모의 필드나 메소드를 물려받습니다.
자바에서 이러한 상속을 사용하기 위해서 extend 를 사용합니다.
예시를 보면서 이해해봅시다.
phone 이라는 클래스를 HandPhone이 상속받고 HandPhone을 SmartPhone이 상속받는 예제입니다.
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만 화소의 사진을 찍어요");
}
}
SmartPhone.java
package test.mypac;
public class SmartPhone extends HandPhone{
public SmartPhone() {
System.out.println("SmartPhone() 생성자");
}
public void doInternet() {
System.out.println("인터넷을 해요");
}
@Override
public void takePicture() {
//필요하다면 부모의 메소드도 여기서 super 예약어를 이용해서 호출할수도 있다.
//super.takePicture();
System.out.println("1000만 화소의 사진을 찍어요");
}
}
자식 클래스는 부모 클래스의 기능을 사용할 수 있습니다.
package test.main;
import test.mypac.SmartPhone;
public class MainClass09 {
public static void main(String[] args) {
SmartPhone p1 = new SmartPhone();
p1.mobileCall();
}
}
SmartPhone에서는 mobileCall이라는 메소드가 정의되어있지 않지만 HandPhone을 상속받았기 때문에 mobileCall을 사용할 수 있습니다.
오버라이딩
또한 자식 클래스에서 부모 클래스 기능을 재정의 할 수 있습니다. 이것을 오버라이딩이라고 합니다.
오버라이딩을 하는 방법은 자식 클래스에서 부모클래스의 메소드의 이름, 인자를 같게 만들고 재정의해주면 됩니다.
예제에서 takePicture부분이 오버라이딩된 모습입니다.
오버라이딩 예제
package test.main;
import test.mypac.HandPhone;
import test.mypac.SmartPhone;
public class MainClass08 {
public static void main(String[] args) {
HandPhone p1 = new HandPhone();
SmartPhone p2 = new SmartPhone();
p1.takePicture();
p2.takePicture();
}
}
SmartPhone의 takePicture에서 1000만 화소의 사진을 찍어요가 출력 되는 모습을 볼 수 있습니다.
상속관계에서의 생성자 호출
상속관계에서의 생성자 호출을 알아봅시다.
new SmartPhone();
객체를 생성하면 부모의 생성자부터 호출이 되는 모습을 볼 수 있습니다.
IS-A 관계
예제의 상속관계는 phone <- HandPhone <- SmartPhone 이렇습니다.
즉, SmartPhone은 HandPhone과 Phone의 하위 개념이라고 할 수 있습니다.
이럴경우에 SmartPhone은 HandPhone, Phone 이다라고 표현 할 수 있습니다.
하지만 Phone이나 HandPhone은 SmartPhone이라고 할 수 없습니다.
자바에서는 이러한 관계를 IS-A 관계라고 합니다.
HandPhone p2 = new SmartPhone();
자식 객체를 생성하여 부모 클래스에 담을 수 있게 됩니다.
이렇게 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질을 자바에서 다형성이라고 말합니다.
cf) 모든 클래스는 자동으로 Object를 상속합니다.
A가 Object에 대입되는 것을 볼 수 있습니다.
모두 Object로 선언이 되는 것을 볼 수 있습니다.
'Languages > JAVA' 카테고리의 다른 글
[JAVA] JFrame 사용해보기 #1 - 예제로 다양한 기능 알아보기 (0) | 2021.11.16 |
---|---|
[JAVA] 상속 알아보기 #2 - this, super (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 |
[JAVA] 이클립스에서 나만의 템플릿 만들기 / 자동 생성 (0) | 2021.11.12 |