10월 31일
1.접근제어자
(1)private:같은 클래스 내에서만 접근이 가능하다.
(2)default:같은 패키지 내에서만 접근이 가능하다.
(3)protected:같은 패키지내에서 + 다른패키지 자손클래스에서 접근이 가능하다.
(4)public: 접근제한이 없음.
클래스에는 public과 default만 붙일수 있음.
메서드는 4가지 접근제어자 붙일수 있음.
2.캡슐화와 접근제어자
접근제어자를 사용하는 이유는 데이터를 보호하기 위함. 이런걸 '캡슐화'라고 한다.
외부로 부터 iv에 직접 접근은 막고 getter와 setter를 이용하여 접근을 허용함.
값을 보호 한다는것은 데이터가 우리가 원하지 않는 어뚱한 값으로 부터 보호하기 위함.
public class Time{
private int hour;
private int minute;
private int second;
public int getHour() {
return hour;
}
public void setHour(int hour) {
if(hour<0||hour>23) return; //if문으로 값을 보호
this.hour = hour;
}
외부에는 불필요하고 내부적으로만 사용되는 부분을 감추기 위해서
접근제어자의 범위는 최대한 좁혀놨다가 필요에 따라 그때 넓히면 된다.
3.다형성
(1)조상 타입의 참조 변수로 자손 타입 객체를 다루는 것.
(2)여러가지 형태를 가질수 있는 등력
package Java;
class Tv{
boolean power;
int channel;
void power() {power=!power;}
void channelUp() {++channel;}
void channelDown() {--channel;}
}
class SmartTv extends Tv{
String text;
void caption() {}
}
public class Ex7 {
public static void main(String[] args) {
SmartTv s=new SmartTv(); //타입 일치
Tv t= new SmartTv(); //타입 불일치.조상타입 참조변수로 자손객체를 생성하고 다룸.룸.
}
}
그렇다면 타입이 같아 내리모콘을 쓰는것과 타입이 달라 조상타입을 쓰는것의 차이는??
SmartTv s=new SmartTv();
SmartTv기능도 7개 SmartTv리모컨도 7개 버튼이라 모두 쓸수 있음
Tv t1= new SmartTv();
SmartTv기능도 7개 Tv리모컨 버튼5개로 버튼에있는 5개 기능만 쓸수 있음.
(3)자손타입의 참조변수로 조상 타입의 객체를 가르킬 수 없다.
예)SmartTv s= new Tv(); ->안됨!!!
리모컨 버튼은 7개 인데, 사용가능할 기능은 5개 이므로 없는기능을 호출하면서 에러가 남!
4.참조변수의 형변환
(1)사용할수 있는 멤버의 갯수를 조절 하는 것 ->리모컨을 바꾸는 것
(2)조상자손관계 일때만 참조변수는 형변환이 가능하다.
(3)형제관계에서는 형변환이 불가하다!!!
class Car{}
class FireEngine extends Car{}
class Ambulance extends Car{}
Car c = (Car) f; 조상인 Car 타입으로 형변환 가능(형변환 생략가능)
FireEngine f= (FireEngine)c; 자손인 FireEngine타입으로 형변환 가능(형변환 생략불가!!!)
형변환은 참조변수가 가르키는 실제 객체의 멤버개수가 몇개인가가 중요하다!
실제멤버개수를 안넘는게 제일 중요!
5.instanceof 연산자
(1)참조변수의 형변화 가능여부 확인에 사용 함. 형변환이 가능하면 true를 반환
(2)형변환 전에 반드시 instanceof로 확인후에 형변환이 가능하다.