extends 키워드 사용package extends1.ex2;
public class Car {
public void move(){
System.out.println("차를 이동합니다.");
}
}
package extends1.ex2;
public class ElectricCar extends Car {
public void charge() {
System.out.println("충전합니다.");
}
}
package extends1.ex1;
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
}
}
결과:
차를 이동합니다.
충전합니다.

상속 관계를 사용하면 부모클래스도 함께 포함해서 생성된다. 외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다.
- 호출할 때는 호출하는 변수의 타입(클래스)을 기준으로 선택
- 위 그림에서는 인스턴스 내부에 같은 타입인 `ElectricCar`를 통해서 `charge()`를 호출

Electric Car에는 move() 메서드가 없으므로 상속 관계에서는 자식타입에 해당 기능이 없으면 부모 타입 으로 올라가서 찾는다. 부모인 Car에 move()가 있으므로 부모에 있는 move() 호출
상속과 기능추가

메서드 오버라이딩
부모에게서 상속 받은 기능을 자식이 재정의 하는 것
package extends1.overriding;
public class ElectronicCar extends Car {
@Override
public void move(){
System.out.println("전기차를 빠르게 이동합니다.");
}
public void charge(){
System.out.println("충전합니다.");
}
}
ElectricCar 는 부모인 Car 의 move() 기능을 그대로 사용하고 싶지 않다. 메서드 이름은 같지만 새로운 기능을 사용하고 싶다. 그래서 ElectricCar 의 move() 메서드를 새로 만들었다.
이제 ElectricCar 의 move() 를 호출하면 Car 의 move() 가 아니라 ElectricCar 의 move() 가 호출된다.
+) @Override
@이 붙은 부분을 애노테이션이라 함
프로그램이 읽을 수 있는 특별한 주석이라 생각하면 된다.
필수는 아니지만 조건을 만족시키지 않으면 컴파일 에러를 발생시켜서 실수를 방지해준다. 고로 코드의 명확성을 위해 붙여주는 것이 좋다.

오버로딩 vs 오버라이딩
요 며칠 개인과제 제출 마감의 여파로 잠을 너무 늦게 잤더니 피곤해서 계속 졸았다ㅠ 아직 강의 진도 나갈 거 많은데... 내일부턴 팀과제도 해야하는데ㅜㅜ 걱정.. 이지만... 그래도 해야지💪 오늘은 좀 일찍 자고 내일 부턴 다시 힘내서 해보고자 한다~~