티스토리 뷰

반응형


* 본 포스팅은 인피니티 북스의 Power JAVA 2판을 참고하여 작성되었습니다.

* 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.



상속(extends, Inheritance)

상속이란 자식 클래스(서브 클래스)에서 부모 클래스(슈퍼 클래스)의 필드와 메소드를 참조하여 쓸 수 있게 해준다. 기본적으로 하나의 클래스에 하나의 슈퍼 클래스밖에 상속 할 수 없다.


Ex.

Class Vehicle {

    public int speed;
    
    public int getSpeed() {
        return speed;
    }
    public void setSpeed(int speed) {
        this.speed = speed;
    }
    
}

class Car extends Vehicle {

}

public class Test {

    public static void main(String[] args) {

        Car A = new Car();
        A.getSpeed();
    }
}


위 소스코드에서 선언한 Car 클래스에는 getSpeed 메소드가 없지만 상속된 Vehicle에 getSpeed 메소드가 있기 때문에 사용 가능하다.

protected : 상속된 서브 클래스에서 protected 로 선언된 필드나 메소드를 public 처럼 사용할 수 있다.


오버 라이딩 (Override)

오버 라이딩 : 슈퍼 클래스에 존재하는 필드나 메소드를 서브 클래스에서 재정의하여 사용할 수 있다.

오버 라이딩을 통한 슈퍼 클래스를 생성할 때는 super 키워드를 사용한다.

Tip. 오버라이딩을 위해 필드나 메소드를 정의할 때 바로 위 상단에 @Override 문구를 넣어주면 오타를 방지할 수 있다. (슈퍼 클래스에 존재하지 않은 메소드를 오버라이드 하려고하면 컴파일 과정에서 에러 발생)


whatFood.java

아래 예제에서는 내장 메소드로 존재하는 toString() 메소드를 Override 했다.

class Food {
    
    private int kcal;
    private int price;
    private int kg;
    
    public Food(int kcal, int price, int kg) {
        this.kcal = kcal;
        this.price = price;
        this.kg = kg;
    }

    @Override
    public String toString() {
        return "Food [kcal=" + kcal + ", price=" + price + ", kg=" + kg + "]";
    }
    
}

class Melon extends Food { //상속

    private String where;
    
    public Melon(int kcal, int price, int kg, String where) {
        super(kcal, price, kg);
        // TODO Auto-generated constructor stub
        this.where = where;
    }

    @Override
    public String toString() {
        return super.toString() + " Melon [where=" + where + "]";
    }
    
}

public class whatFood {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Melon mel = new Melon(100, 4000, 3, "Afganistan");
        System.out.println(mel.toString());
    }

}



반응형
프로필사진

Yowu (Yu Yongwoo)

흔한 Node.js/Java 백엔드 개발자입니다
Ubuntu와 MacOS 데스크탑 개발 환경을 선호합니다
최근에는 vscode와 IntelliJ를 사용하고 있습니다
vscode에는 neovim, IntelliJ는 ideaVim
개발용 키보드는 역시 HHKB Pro 2 무각입니다
락 밴드에서 드럼을 쳤습니다

최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함
Total
Today
Yesterday