방명록
- 자바의 정석 79~강 캡슐화, 다형성, 참조변수 형변환, instanceof 연산자,2023년 08월 06일 00시 47분 45초에 업로드 된 글입니다.작성자: 민발자728x90
ch 7-22 캡슐화
1. 캡슐화와 접근 제어자
접근 제어자를 사용하는 이유
- 외부로부터 데이터를 보호하기 위함, 외부에서 직접 접근하는 것을 막고 메서드를 이용 간접 접근을 허용시킴
- 외부에는 불필요한, 내부적으로 사용되는 부분을 감추기 위해서 사용
ch 7-23 다형성
1. 다형성★
조상 타입 참조 변수로 자손 타입 객체를 다루는 것
Tv t = new SmartTv(); // 타입이 불일치하지만 가능 // 조상 타입 참조변수인 t로 자손 타입 객체 SmartTv를 다룰수 있음 // 반대인 경우 불가능(자손 타입 참조변수로 조상 타입 객체를 다룰수 없음)
조상 타입 참조변수로 자손 객체를 다루면 조상 멤버만 사용가능 ex)Tv 5개 SmartTv 7개면 5개 사용가능
ch 7-24~25 참조변수의 형변환
1. 참조변수의 형변환
기본형의 형변환처럼 값이 변경되는 것이 아닌 사용할 수 있는 멤버의 갯수를 조절함
조상 자손 관계의 참조변수는 서로 형변환 가능
class Car { 4개 멤버 } class FireEngine extends Car { 1개 멤버 } class Ambulance extends Car { } FireEngine f = new FireEngine(); // 5개 Car c = (Car)f; // 부모로 형변환 4개 FireEngine f2 = (FireEngine)c; // 자식으로 형변환 5개 Ambulance a = (Ambulance)f; // 에러 상속관계가 아닌 클래스는 형변환 불가
2. 형변환시 주의사항
Car c = new Car(); //4개의 멤버 FireEngine f = (FireEngine)c; f.water(); // 형변환 실행 에러 java.lang.ClassCasrException // 컴파일러는 타입이 일치하기때문에 에러 발생 안함 // 형변환을 했어도 객체 자체가 Car이기 때문에 // 실제로 어떤 객체인지가 중요
+) 어려워서 예시로 실행해봄
class Ex7_7 { public static void main(String args[]) { Car c1 = new Car(); Car c2 = new FireEngine(); c1.drive(); // 4개 c2.drive(); // 4개 리모컨(참조변수) 자체가 car이기 때문 FireEngine f1 = new FireEngine(); f1.drive(); // 5개 리모컨(참조변수) 자체가 FireEngine이기 때문 f1.water(); // 가능 // 부모 -> 자식 형변환 // FireEngine f2 = (FireEngine)new Car(); // 형변환 실행 에러 //f2.drive(); 형변환 실행에러로 불가능 // 자식 -> 부모 형변환 Car c3 = (Car)f1; c3.drive(); // 4개 객체는 FireEngine 리모컨(참조변수)는 car } } class Car { String color; int door; void drive() { System.out.println("drive, Brrrr~"); } void stop() { System.out.println("stop!!!"); } } class FireEngine extends Car { void water() { System.out.println("water!!!"); } }
ch 7-26 instanceof 연산자
1. instancof 연산자
참조변수의 형변환 가능 여부 확인 → 조상과 자신 true 반환
참조변수를 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위함
ch 7-27~28 매개변수 다형성
1. 다형성의 장점
- 다형적 매개변수
- 하나의 배열로 여러 종류 객체 다루기
2. 다형성 정리
- 조상 타입으로 자식 타입을 다룰 수 있음
- 참조변수의 형변환(리모컨 바꾸기, 사용가능한 멤버 갯수 조절)
- instanceof 연산자로 형변환 가능 여부 확인
3. 매개변수의 다형성
참조형 매개변수는 메서드 호출시 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있음
class Product{ int price; int point; } class Tv extends Product {} class Computer extends Product {} class Audio extends Product {} class Buyer { int money = 1000; int point = 0; // 매개변수를 부모타입으로 넘겨줌 다형성으로 computer, tv, audio 모두 구매 가능 void buy(Product p) { money -= p.price; point += p.point; } }
ch 7-29~30 여러종류 객체를 배열로 다루기
1. 여러 종류 객체를 배열로 다루기
조상타입 배열에 자손들의 객체를 담을 수 있음
// 조상 타입의 배열에 자손들의 객체를 담을 수 있음 Product p[] = new Product[3]; p[0] = new Tv(); p[1] = new Computer(); p[2] = new Audio();
728x90'정리 > Java' 카테고리의 다른 글
자바의 정석 89~92강 인터페이스, 인터페이스와 다형성, 장점, 디폴트 메서드, static메서드 (0) 2023.08.07 자바의 정석 86~88강 추상 클래스, 추상 메서드 (0) 2023.08.07 자바의 정석 75~강 패키지, 클래스 패스, import, 제어자, 접근 제어자 (1) 2023.08.05 자바의 정석 73~74강 오버라이딩, 참조변수 super, 생성자 super() (0) 2023.08.05 자바의 정석 70~72강 상속, 클래스 간의 관계, 상속과 포함, 단일 상속, Object 클래스 (0) 2023.08.04 다음글이 없습니다.이전글이 없습니다.댓글