protected 키워드
- private로 정의된 변수들은 해당클래스 내에서만 부를수 있다.
- 즉, 상속된 자식클래스들도 접근을 못한다는 소리다.
하지만 protected키워드는 이러한 접근을 가능하게 한다.
오직 자신과 자식키워드에게만 허용된 변수를 설정할 수있다.
public class BankAccount {
private int balance;
...
}
public class MinimumBalanceAccount extends BankAccount {
...
@Override
public boolean withdraw(int amount) {
if (getBalance() - amount < minimum) {
System.out.println("적어도 " + minimum + "원은 남겨야 합니다.");
return false;
}
setBalance(getBalance() - amount);
return true;
}
}
- 위와 같이 자식클래스가 부모클래스의 변수인 balance를 접근할 때 getter 메소드를 써야한다.
하지만 protected 키워드를 사용한다면
public class BankAccount {
protected int balance;
...
}
public class MinimumBalanceAccount extends BankAccount {
...
@Override
public boolean withdraw(int amount) {
// if (getBalance() - amount < minimum) {
if (balance - amount < minimum) {
System.out.println("적어도 " + minimum + "원은 남겨야 합니다.");
return false;
}
// setBalance(getBalance() - amount);
balance -= amount;
return true;
}
}
이렇게 바로 변수 balance에 접근이 가능하다.
하지만 다른 상속받지 않은 부모관계에 있지 않은 클래스에서 호출할수는 없다.
Object 클래스
- object 클래스는 모든 클래스 들의 부모이다. 맨처음시작된 루트 클래스라고 할수있다.
즉, 모든 클래스는 object 클래스를 부모로둔 자식클래스이며 확장된 클래스이다.
아래 코드를 살펴보자
public class Song extends Object{
private String songName;
private Artist artist;
private Album album;
// 생성자 인수 : songName, artist, album
public Song (String songName, Artist artist, Album album){
this.songName = songName;
this.artist = artist;
this.album = album;
}
// String toString 오버라이드
@Override
public String toString(){
String answer = this.songName + " - " +this.artist.getArtistName() +"\n"+this.album.getAlbumName()+"("+this.album.getMadeyear()+")";
return answer;
}
}
위코드에서 Song이라는 클래스는 Object클래스를 확장한 것이다.
- 물론 생략해도 된다.
오버라이드한 메소드들 중 println 이라는 함수는 다양한 인수로 오버라이드되어 구성되게 되는데 이중
Object 클래스를 인수로 넘겨줄수 있다. 이때 System.out.println(인스턴스); 라는 코드는
인스턴스.toString(); 이라는 코드를 넘겨준다.
toString이라는 코드는 오버라이드 하지않으면 객체의 인스턴스 주소를 넘겨주지만
오버라이드 하면 해당 오버라이드한 코드를 넘겨주게된다.
public class Main {
public static void main(String[] args) {
Person person = new Person("신의", 17);
System.out.println(person);
}
}
toString 오버라이드 성공
public class Person{
@Override
public String toString(){
return "toString 오버라이드 성공";
}
}
'Programming language > Java' 카테고리의 다른 글
Java - 실무6 [블랙잭] (0) | 2020.10.19 |
---|---|
Java - 11 [Random , Collections] (0) | 2020.10.19 |
Java - 9 [상속, super] (1) | 2020.10.18 |
Java - 실무5 [MP3플레이어] (1) | 2020.10.18 |
Java - 실무4 [학점계산기] (2) | 2020.10.18 |