본문 바로가기

프로그래밍/Java (기초)

상속(inheritance)

반응형

상속(inheritance)


  • 객체를 스스로 만들지 않아, 소스를 변경할수 없거나, 변경 하더라도 원 소스가 사라질수 있을 경우, 문제가 일어나지 않기 위해
  • 객체가 다양한 곳에서 활용되고 있고, 메소드를 추가하면 다른곳에서 문제가 발생할때, 


즉 기존의 객체들을 유지 하면서, 새로운 객체를 추가하거나, 기능을 추가할일이 생길때 새로운 클래스를 만들어 기존의 클래스에 ‘상속’ 시키는 개념이 등장하게 된다.


이때 기존에 만들어진 클래스는 새로운 클래스에 객체들을 되물림 하게 된다고 하여.. ‘부모 객체’가 되고, 새로이 추가 되는 객체는 ‘자식 객체’라고 명한다.


부모 클래스와 자식 클래스의 관계를 상위(super) 클래스와 하위(sub) 클래스라고 표현하기도 한다. 또한 기초 클래스(base class), 유도 클래스(derived class)라고도 부른다. 


*또한 하위 클래스에 새로운 하위 클래스를 생성하는 것또한 가능하다

(자식객체에 또 자식객체를 생성하여 상속할수 있다)


class Calculator {

    int left, right;

 

    public void setOprands(int left, int right) {

        this.left = left;

        this.right = right;

    }

 

    public void sum() {

        System.out.println(this.left + this.right);

    }

 

    public void avg() {

        System.out.println((this.left + this.right) / 2);

    }

}

 

class SubstractionableCalculator extends Calculator {

    public void substract() {

        System.out.println(this.left - this.right);

    }

}

 

public class CalculatorDemo1 {

 

    public static void main(String[] args) {

 

        SubstractionableCalculator c1 = new SubstractionableCalculator();

        c1.setOprands(10, 20);

        c1.sum();

        c1.avg();

        c1.substract();

    }



// class SubstractionableCalculator extends Calculator {

    public void substract() {

        System.out.println(this.left - this.right);

    }

}


기존의 클래스(상위 클래스)인 Calculator는 새로운 클래스 (하위 클래스)인 SubstractionableCalculator에게 객체들을 상속한다.

또한 이 클래스는 메소드 substract를 선언하고. 그것은

좌,우항을 뺀 값을 출력함을 정의한다.



   public static void main(String[] args) {

 

        SubstractionableCalculator c1 = new SubstractionableCalculator();

        c1.setOprands(10, 20);

        c1.sum();

        c1.avg();

        c1.substract();


인스턴스 SubstractionableCalculator는 객체 c1을 생성하여 기존의 메소드와 새로 생성한 클래스의 subtract 메소드를 포함하여 호출한다



결과

(*30 15 -10)



반응형

'프로그래밍 > Java (기초)' 카테고리의 다른 글

overriding  (0) 2016.03.28
인터페이스(interface)  (0) 2016.03.26
초기화와 생성자(Constructor), this, super  (0) 2016.03.26
유효범위 (Scope)  (0) 2016.03.26
입력과 출력. String[] args  (0) 2016.03.18