[Java] 상속
2024. 2. 7. 21:40ㆍMemorizing/Java
728x90
본 포스팅은 Java에서 등장하는 상속의 개념과 특징 그리고 오버라이딩, 다형성, 추상 클래스에 관해 다룹니다.
상속
상속은 부모 클래스의 필드와 메서드를 자식 클래스가 이용할 수 있도록 하는 것을 말합니다. 아래와 같이 부모 클래스를 상속할 수 있습니다. 자식 클래스에서 부모 클래스의 필드를 이용하려면 super를 사용하면 됩니다.
public class SportsCar extends Car{
}
오버라이딩
오버라이딩은 자식 클래스가 부모의 필드와 메서드를 다시 재정의하여 사용하는 것을 말합니다. 아래와 같이 오버라이딩 할 수 있습니다.
public class Car {
String company; // 자동차 회사
private String model; // 자동차 모델
private String color; // 자동차 색상
private double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear = 'P'; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
public double brakePedal() {
speed = 0;
return speed;
}
public void horn() {
System.out.println("빵빵");
}
}
public class SportsCar extends Car{
@Override
public double brakePedal() {
speed = 100;
System.out.println("스포츠카에 브레이크란 없다");
return speed;
}
@Override
public void horn() {
booster();
}
}
다형성
다형성에 대해 말하기 이전에 타입 변환에 대해 말해야합니다.
타입 변환
타입 변환은 부모 클래스의 변수로 자식 클래스를 생성할 때, 만들어진 변수는 자동으로 부모 클래스로 타입이 변환됩니다. 아래와 같이 Mammal, Whale 클래스가 있다고 했을 때, Whale 클래스로 생성된 mammal 변수는 Mammal 클래스로 자동 타입 변환이 이루어집니다. 단, 이때 Whale의 메서드에는 접근할 수 없습니다.
public class Main {
public static void main(String[] args) {
Mammal mammal = new Whale();
// 즉, 부모 클래스에 swimming이 선언되어있지 않아서 사용 불가능합니다.
// mammal.swimming(); // 오류 발생
// Whale whale = new Mammal(); // 오류 발생
mammal.feeding();
}
}
다형성
자동 타입 변환을 이용하면 아래와 같이 부모 클래스의 객체로 자식 클래스를 선언할 수 있습니다.
public Car(Tire tire) {
this.tire = tire;
}
...
Car car1 = new Car(new KiaTire("KIA"));
Car car2 = new Car(new HankookTire("HANKOOK"));
추상 클래스
추상 클래스는 클래스에서 반드시 선언해야하는 메서드를 정해줘야할 때 사용할 수 있습니다. 이로인해 클래스 간의 일관성 및 유지보수성이 좋아집니다.
public abstract class Car {
String company; // 자동차 회사
String color; // 자동차 색상
double speed; // 자동차 속도 , km/h
public double gasPedal(double kmh) {
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public abstract void horn();
}
public class BenzCar extends Car {
@Override
public void horn() {
System.out.println("Zenesis 빵빵");
}
}
public class Main {
public static void main(String[] args) {
double speed;
Car car1 = new BenzCar();
speed = car1.gasPedal(20);
car1.horn();
}
}
'Memorizing > Java' 카테고리의 다른 글
[Java] 프로세스와 스레드 - 2 (0) | 2024.02.17 |
---|---|
[Java] 프로세스와 스레드 - 1 (0) | 2024.02.17 |
[Java] Class (0) | 2024.02.07 |
[Java] Collection (0) | 2024.02.07 |
[Java] Array (0) | 2024.02.07 |