티스토리 뷰


* 본 포스팅은 인피니티 북스의 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)

My MBTI type is ENTP. (Of course I do not believe it 100%, but I want to do that) I use Node.js to develop the backend. I use Ubuntu Linux as my development environment, and I love Vim. I am interested in open source and are keen to contribute. I have a bachelor's degree in computer science from Catholic University and now a software engineer at Plating Inc., I spent about 5 years developing and learning, and I am still interested in software development and culture. Recently, I am interested in React, Serverless structure, Domain Design Driven. Sometimes I play drums in the band.