접근 제어자(access modifier)
- private: 같은 클래스 내에서만 접근이 가능
- (default): 같은 패키지 내에서만 접근이 가능
- protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능
- public: 접근 제한이 전혀 없음
- public > protected > (default) > private
캡슐화와 접근 제어자
- 접근제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위해서
- https://youtu.be/3NuVD8eOMfc
- 외부에는 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서
class Time{
private int hour; //0~23 사이의 값을 가져야 함.
private int minute;
private int second;
public void setHour(int hour){
if(isValidhour(hour)) return;
this.hour = hour;
}
//매개 변수로 넘겨진 hour가 유효한지 확인해서 알려주는 메서드
private boolean isValidhour(int hour){
return hour <0 || hour >23;
}
public int getHour() { return hour; };
}
public class TimeTest {
public static void main(String[] args) {
Time t = new Time();
// t.hour = -100;
t.setHour(21); //hour의 값을 21로 변경
System.out.println(t.getHour());
t.setHour(100);
System.out.println(t.getHour());
}
}
- 접근제어자의 범위는 최소화 시키는 것이 좋다
다형성(polymorphism)
- 여러가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
- 타입 불일치해도 괜찮다
- 객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이
- 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없음
- 참조변수의 타입은 인스턴스의 타입과 일치하는 것이 보통이지만 일치 하지 않을 수도 있음
- 참조변수가 조상타입일 때와 자손 타입일 때의 차이
- 참조변수로 사용할 수 있는 멤버의 갯수가 달라짐
- 자손타입의 참조변수로 조상 타입의 객체를 가리킬 수 없음
참조변수의 형변환
- 사용할 수 있는 멤버의 갯수를 조절하는 것
- 조상 자손 관계의 참조변수는 서로 형변환 가능
public class Ex7_7 {
public static void main(String[] args) {
Car car = null;
FireEngine fe = new FireEngine();
// FireEngine fe2 = null; //car = (Car)fe; 에서 형변환이 생략됨
FireEngine fe2 = (FireEngine)car; // 조상 -> 자손으로 형변환
Car car2 = (Car)fe2; // 자손 -> 조상으로 형변환
// car2.drive(); //NullPointerException 발생.
// fe.water();
// fe2 = (FireEngine) fe; //자손타입 <- 조상타입, 형변환 생략 불가
// fe2.water();
}
}
class Car{
String color;
int door;
void drive() {
System.out.println("drive, Brrrr~~");
}
void stop() {
System.out.println("stop!!");
}
}
class FireEngine extends Car {
FireEngine() {
}
void water() {
System.out.println("water!!!");
}
}
'Java > 자바의 정석' 카테고리의 다른 글
남궁성 자바의 정석 기초편 ch 7 추상클래스 추상메서드 (0) | 2022.11.30 |
---|---|
남궁성 자바의 정석 기초편 ch 7 instance of 연산자 매개변수다형성 배열 (0) | 2022.11.30 |
남궁성 자바의 정석 기초편 ch 7 패키지 클래스 import문 제어자 static final abstract (0) | 2022.11.26 |
남궁성 자바의 정석 기초편 ch 7 상속 (0) | 2022.11.26 |
남궁성 자바의 정석 기초편 ch 6 오버로딩 생성자 초기화 (0) | 2022.11.22 |