다음은
전기차
와주유차
2종류의 차를 생성하여 사용하는 단적인 예시이다.
전기차
public class ElectricCar {
public void move() {
System.out.println("차를 이동합니다.");
}
public void charge() {
System.out.println("충전합니다.");
}
}
주유차
public class GasCar {
public void move() {
System.out.println("차를 이동합니다.");
}
public void fillUp() {
System.out.println("기름을 주유합니다.");
}
}
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
GasCar gasCar = new GasCar();
gasCar.move();
gasCar.fillUp();
}
}
전기차와 주유차는
차
라는 큰 개념에서 파생된 자동차들이다. 즉,Car 라는 추상적인 개념
에서구체화 된 2종류의 차 종류이다.
해당 차들은 move() 라는 공통성을 갖게 됨으로, 공통적인 특성을 묶기 위해선상속
이 제격이다!
//화살표 방향 -> : 화살표의 의미는 "내가 너를 안다."로 생각하면 좋다.
public class ElectricCar extends Car{
public void charge(){
System.out.println("충전합니다.");
}
}
//화살표 방향
public class GasCar extends Car {
public void fillUp(){
System.out.println("기름을 주유합니다.");
}
}
- 상속을 받는
인스턴스를 생성하면, 부모 클래스까지 한꺼번에 불러서 생성
한다.- 메서드를 호출할 때, 메서드를 찾는 기준은
호출한 변수의 타입명
을 보고 찾는다.
2-1) 만일, 호출한 타입에 해당 메서드가 없으면? -> 부모 메서드로 찾아간다.
2-2) 만일, 부모 메서드에도 해당 메서드가 없으면? -> 컴파일 오류 발생
1. 생성과정 : 상속한 부모클래스까지 생성
2. 메서드 호출 기준 : 호출한 변수의 타입명을 본다.
2-1) 만일, 호출한 타입에 해당 메서드가 없으면? -> 부모 메서드로 찾아간다.
2-2) 만일, 부모 메서드에도 해당 메서드가 없으면? -> 컴파일 오류 발생
protected
의 사용이 여기서 나타난다 !private :
동일 클래스
내 접근 허용
default : 동일 클래스 +동일 패키지
내 접근 허용
protected : 동일 클래스 + 동일 패키지 +타 패키지-상속
접근 허용
public :모두 허용
규칙 : 상속 관계를 사용하면, 자식 클래스의 생성자에서 부모 클래스의 생성자를 반드시 호출해야 한다.
동일한 필드명, 동일한 메서드가 오버라이딩 되어 있을 경우, super() 연산자를 통해서 부모 클래스에 대해 참조할 수 있다.
B
extendsA
C
extendsB
일 때,
A -> B -> C
순서로 생성된다.