Java 기초 상속(2) - 접근제어
728x90
기본 환경
JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 |
목표
접근제어을 상속에서 어떻게 사용하는지 이해한다.
코드
package ex12inheritance;
class Account{
/*
맴버변수가 상관관계에 있다 하더라고 private으로 선언되면
클래스 내부에서만 접근이 가능하다. 즉 상속받은 하위클래스에서는
직접 접근이 불간능하다.
*/
private int money;
public Account(int init) {
money = init;
}
/*
입금처리 : protected로 선언되었으므로 상속관계에서 접근 가능
*/
protected void depositMoney(int _money) {
if(_money < 0) {
System.out.println("마이너스 금액은 입금처리 불가합니다.");
return;
}
money += _money;
}
/*
private 맴버를 외부 클래스로 반환할 떄 사용한다.
*/
protected int getAccMoney() {
return money;
}
}
class SavingAccount extends Account{
/*
인자생성자에서 부모의 생성자 메소드를 호출하기 위해 super()를
사용한다. 이때 인자가 하나인 생성자를 호출하게 된다.
*/
public SavingAccount(int initVal) {
super(initVal);
}
public void saveMoney(int money) {
depositMoney(money);
}
/*
부모클래스에 protected로 선언된 맴버메소드를 각각 호출한다.
private맴버변수인money 는 직접 겁든할 수 없으므로 접근 가능한
메소드를 통해 간접적으로 접근한다.
*/
public void showAccountMoney() {
System.out.println("지금까지의 누적금액 : " + getAccMoney() );
//System.out.println("지금까지 누적금액 :" + money);
}
}
public class E02PrivateInheritanceMain {
public static void main(String[] args) {
/*
private 맴버이므로 상속받은 하위클래스이 참조변수를 통해서는
접근이 불가능하다. 부모의 맴버메소드를 통해 간접적으로 접근한다.
*/
SavingAccount sa = new SavingAccount(10000);
//sa.money = 100000; [접근불가]
sa.saveMoney(5000);
sa.showAccountMoney();
sa.saveMoney(-1000);//입금불가 처리
sa.showAccountMoney();
/*
부모객체의 참조변수를 통해서도 private맴버는 접근이 불가능하다.
현재 접근하고 있는 위치가 다른 클래스이기 떄문이다.
*/
Account account = new Account(1000);
//account.Money = 1000; [접근불가]
}
}
private으로 선언하면 상속받은 클래스라도 접근하지 못합니다. default는 가능하며 다른 클래스에서 자식의 객체를 선언하여도 그 객체를 통해 부모의 private을 접근할 수 없습니다.
결과 값
'Java > Java_기초부터 _끝까지' 카테고리의 다른 글
Java 기초 상속(4) - 컴퓨터 상속 구조 (0) | 2020.11.24 |
---|---|
Java 기초 상속(3) - static (0) | 2020.11.20 |
Java 기초 상속(1) - 기본개념 (0) | 2020.11.18 |
Java 기초 static(3) - 싱글톤 디자인 패턴 (0) | 2020.11.17 |
Java 기초 static(2) - StaticBlock (0) | 2020.11.17 |