JAVA 4. 상속

김창민·2024년 7월 24일

BE

목록 보기
8/50

상속은 단어 그대로 부모가 자식에게 물려주는 행위

객체지향에서 부모와 자식이라고 한다면 부모 클래스 - 자식 클래스가 생각난다. 부모, 자식 관계의 클래스는 부모의 필드,메소드를 자식이 사용할 수 있으며 심지어 수정해서 사용도 가능하다.

상속

자식 클래스가 부모 클래스를 상속하는건 다음과 같다.

public class 자식 extends 부모{

}

상속은 사실 확장이라고 볼 수 있는데, 자식이 부모의 필드와 메서드를 사용가능 하다는 건 -> 자식 필드, 메소드 > 부모 필드, 메서드라고 할 수도 있다. (부모님이 위대하다고 자식<부모라고 생각하면 안된다)

자식이 extends를 통해 부모에게 상속 받게 되면, 자식 필드와 메소드에 별 다른 추가 작업없이 바로 사용이 가능하다.

그냥 자식 클래스로 구현한 인스턴스에서 부모 메소드, 필드를 사용하면 된다.

public class Car {
	private String model; 
    
    public void setModel(String model) {
        this.model = model;
    }
    public void getModel() {
        return this.model;
    }
}
public class SportsCar extends Car{

}
psvm(String[] args){
	SportsCar sportsCar = new SportsCar();
    sportsCar.setModel("GV80");
    sportsCar.getModel();//GV80
}

참고로 자바는 다중 상속은 지원하지 않는다.
부모 클래스에서 상속받는 메소드, 필드가 동일명이면 구분할 수 있는 방법이 없기 때문.

오버라이딩

부모에게서 상속받은걸 자식클래스에서 재구성 하는 것이다.
어노테이션을 이용해서 Override라고 표시만 하면 되는데 조건이 3개 있다.
1. 선언부가 부모 클래스와 일치해야한다.
2. 접근제어자를 부모 클래스보다 좁게 하지 못한다.
3. 예외는 부모 클래스 보다 많이 선언 가능하다.

사용 예시는 다음과 같다.

public class Car {
~~
	public double brakePedal() {
    	speed = 0;
        return speed;
    }
}
public class SportsCar extends Car{
	@Override
    public double brakePedal() {
        speed = 100;
        System.out.println("스포츠카에 브레이크란 없다");
        return speed;
    }
}

이렇게 @Override를 통해 오버라이딩을 한다고 명시한후 메소드 내부 로직은 마구마구 수정해도 된다.

super,super()

본 인스턴스를 가르키는 this처럼 본 인스턴스를 구현한 클래스에서 상속한 필드, 메소드를 가르키는게 super다. this랑 사용법은 같은데 대신 위치가 부모 클래스라는게 다르다.

포함

상속은 extends로 하지만 자동차-바퀴처럼 포함된 관계는 어떻게 사용하는가?

정답은 그냥 사용하면 된다. 즉, 해당 클래스 내에서 다른 클래스의 인스턴스를 멤버 변수로 사용하면 된다는 것.

public class Wheel {
~~~
}
public class Car {
	private Wheel frontLeft;
    private Wheel frontRight;
    private Wheel backLeft;
    private Wheel backRight;
    ~~~
}

이렇게 그냥 가져다가 쓰면 된다.

profile
일일 회고 : https://rlackdals981010.github.io/

0개의 댓글