2018-3-6 TIL Inheritance

상속

  • 위 그림의 핵심은, Business Man클래스의 인스턴스에는 상속의 대상인 Man클래스에 정의된 메소드와 변수가 존재한다는 사실이다.

super키워드

super(1, 3, 5);
  • 상위 클래스의 생성자를 호출하면서 인자로 1,3,5를 전달해라
  • 하위클래스의 생성자가 인자 전달을 위해서 먼저 호출이 되었지만, 실행은 상위 클래스의 생성자가 먼저 이루어진다. 그러면서 상위 클래스의 멤버가 초기화가 되고 실행이 완료되면, 하위 클래스의 생성자가 실행이 된다.

protected 지시자

class AAA
{
	int num1;
    protected int num2;
}

class BBB extends AAA
{
	num1 = 10; // AAA클래스의 default 멤버에 접근
    num2 = 20; // AAA클래스의 protected 멤버에 접근
}
  • class BBB에서 num1에 접근이 가능한 이유는 default라는 패키지에 묶여있기 때문이다.
  • protected는 다른 패키지에 존재하더라도 상속관계에 놓이면 접근을 허용하는 접근제어 지시자이다.
package yoon;

class Accumulator {
    private int val;
    Accumulator(int init) { val = init; }
    protected void accumulate(int num){
        if (num < 0)
            return;
        val += num;
    }
    protected int getAccVal() { return val; }
}

class SavingAccount extends Accumulator { // 적금통장을 표현한 클래스
    public SavingAccount(int initDep) { // 적금통장 개설 시 입금액
        super(initDep);
    }

    public void saveMoney(int money){ // 돈의 입금
        accumulate(money);
    }

    public void showSaveMoney(){
        System.out.print("지금까지의 누적금액 : ");
        System.out.println(getAccVal());
    }
}

public class PrivateInheritance {
    public static void main(String [] args){
        SavingAccount sa = new SavingAccount(1000);
        sa.saveMoney(1000);
        sa.saveMoney(1000);
        sa.showSaveMoney();
    }
}
//result
지금까지의 누적금액 : 3000
  • Accumulator를 상속한 SavingAccount클래스에서는 변수 val에 직접적인 접근이 불가하다.
Written on March 6, 2018