상속과 오버라이딩
자바에서는 클래스의 상속 기능을 통해 부모 클래스의 필드,변수,메소드를 자식 클래스가 물려받을수있다.
또한, 물려받은 부모 클래스의 멤버를 각자의 입맛에 맞게 변경할수있다(=오버라이딩)
그리고, 모든 클래스는 1개의 클래스밖에 상속받지 못한다.
자동차를 예로 들어서 설명해보자.
public class Car {
Tire tire = new Tire();
String name;
int number;
public Car(String name,int number){
this.name = name;
this.number = number;
System.out.println("차종:"+name + ",차량번호:"+number);
}
public void run(){
System.out.println("운행시작");
}
}
public class Tire {
public Tire(){
System.out.println("장착");
}
public void roll() {
System.out.println("기본타이어");
}
}
public class KoreaTire extends Tire{
@Override
public void roll() {
System.out.println("한국타이어로 변경");
}
Car 클래스는 Tire 객체, 차종,차량번호를 필드멤버로 가지고있다.
그리고 생성자로 매개변수를 통해 차종과 차량번호를 받아온다.
Tire 클래스는 기본 생성자로 "장착"이라는 메시지를 출력하며, roll()이라는 메소드를 가지고있다.
KoreaTire 클래스는 Tire클래스로부터 상속을 받아서, 부모클래스가 가진 roll()이라는 메소드를 자체적으로 재정의하여
오버라이딩 하였다.
이를 상속과 오버라이딩 이라고 한다.
public class CarExam {
public static void main(String[] args) {
Car mycar = new Car("sonata",1234);
mycar.run();
mycar.tire.roll();
// mycar.tire.run(); Tire클래스타입 tire는 Car의 필드 객체이므로 Car메소드 사용불가.
mycar.tire = new KoreaTire(); /*
KoreaTire는 Tire를 상속받은 자식클래스이므로 자동형변환을 통해 자식 객체의 메소드를 사용할수있다.
*/
mycar.tire.roll();
}
}
다형성이란?
Car클래스는 Tire클래스의 객체 tire를 필드에 가지고있다.
이 필드객체 tire는 Tire클래스 타입이지만, 자식 KoreaTire클래스의 멤버를 사용할수있다.
이를 필드의 다형성이라고 한다.
즉, 동일한 타입의 객체를 필드 멤버로서 가지고있지만, 어떤 객체를 필드에 저장하느냐에 따라서 각각 다르게 사용할수있다는 것이다!
상속과 다형성을 공부하면서 왜 굳이 다형성이라는 기능을 사용할까?라는 의문점이 들었는데, JAVA에서 클래스의
단일상속의 한계점을 극복하여 객체가 좀더 다양한 객체들과 상호작용 할수있도록 하기위함이 아닐까 라는 생각이 들었다. 아직 부족하지만, 더 많이 공부해봐야지!
※해당 내용은 JAVA를 공부하면서 배운 내용을 정리한 글로 배움의 깊이가 얕아 내용이 틀릴수있습니다.
'Category > JAVA' 카테고리의 다른 글
[JAVA] Object클래스& ==연산자와 equals메소드 (0) | 2023.11.10 |
---|---|
[JAVA] 예외 처리 (0) | 2023.10.24 |
[JAVA] 객체지향 프로그래밍_ 1. 클래스와 인스턴스 (1) | 2023.10.18 |
[SpringBoot] GetMapping과 PostMapping (0) | 2023.10.13 |
[자바] 추상클래스와 인터페이스 (1) | 2023.10.11 |