웹개발_JAVA 10
※ 모든 자식은 부모 타입이다.
A와 B클래스에서
B가 A에 상속될때
A의 타입은 A
B의 타입은 B,A
Casting
*저장공간은 부모 타입인데 자식 생성자를 호출
*자바는 메모리에 필드를 올리려면 반드시 그 안에
모든 필드가 구현이되어야한다(빈공간 x)
-넘치는건 가능
1. up casting(부모)
자식 값을 부모 타입으로 형변환
ex) A a = new B
2. down casting(자식)
up casting 된 객체를 자식 타입으로 형변환
* 모든 자식 타입은 부모 타입이다.(같은 타입)
ex) Bb = (B)NewA();
.Bb = (B)a;
※ 부모 값을 자식 값으로 형변환 시 오류
- 부모는 자식 타입이 아니다
- down casting은 강제형변환 처럼 변환 가능
package castingTest;
class Car {
void engineStart() {
System.out.println("열쇠로 시동 켬");
}
}
class SuperCar extends Car {
@Override
void engineStart() {
System.out.println("음성으로 시동 켬");
}
public String toString() {
return "SuperCar []";
}
void openRoof() {
System.out.println("지붕 열기");
}
}
public class CastingTest {
public static void main(String[] args) {
Car matiz = new Car();
SuperCar ferrari = new SuperCar();
// up casting
Car noOptionFerrari = new SuperCar();
noOptionFerrari.engineStart(); //업캐스팅(재정의) 되서 자식인 supercar의 값을 가져옴
// down casting
SuperCar fullOptionFerrari = (SuperCar)noOptionFerrari;
fullOptionFerrari.openRoof();//다운캐스팅 후 정상 작동확인
// SuperCar brokenFerrari = (SuperCar)new Car(); //오류남 ***다운캐스팅은 업캐스팅 이후에 사용가능
// instanceof : 조건식
// 객체 instanceof 타입 : 참 또는 거짓
System.out.println(matiz instanceof Car); //true
System.out.println(matiz instanceof SuperCar);//false
System.out.println(ferrari instanceof Car);//true
System.out.println(ferrari instanceof SuperCar);//true
System.out.println(noOptionFerrari instanceof Car);//true
System.out.println(noOptionFerrari instanceof SuperCar);//자식이 부모타입이라 true
System.out.println(fullOptionFerrari instanceof Car);//업캐스팅 -> 다운캐스팅 true
System.out.println(fullOptionFerrari instanceof SuperCar);//true
// 부모를 자식에 비교할때만 false
}
}
package castingTest;
//* 캐스팅 실습
//넷플릭스
//애니메이션, 영화, 드라마 클래스 선언
//사용자가 선택한 영상이
//애니메이션이라면 "자막 지원" 기능 사용
//영화라면 "4D" 기능 사용
//드라마라면 "굿즈" 기능 사용
public class CastingTask {
public void checkVideo(Video video) { //업캐스팅
if(video instanceof Animation) {
Animation animation = (Animation) video; // 다운캐스팅
animation.printSubtitle();
}else if(video instanceof Drama) {
Drama drama = (Drama) video; // 다운캐스팅
drama.sellGoods();
}else if(video instanceof Film) {
Film film = (Film) video; // 다운캐스팅
film.moveChair();
}
}
public static void main(String[] args) {
CastingTask castingTask = new CastingTask();
Video[] videos = {
new Film(),
new Drama(),
new Animation()
};
for (int i = 0; i < videos.length; i++) {
castingTask.checkVideo(videos[i]);
}
}
}
package castingTest;
public class Video {;}
package castingTest;
public class Animation extends Video {
public void printSubtitle() {
System.out.println("자막 지원");
}
}
package castingTest;
public class Drama extends Video {
public void sellGoods() {
System.out.println("굿즈");
}
}
package castingTest;
public class Film extends Video {
public void moveChair() {
System.out.println("4D");
}
}
//랜덤 사용해보기
package randomClass;
import java.util.Iterator;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
Random random = new Random();
for (int i = 0; i < 100; i++) {
System.out.println(random.nextInt(3));
}
}
}
*은행 프로그램 실습
은행은 3개를 선언한다.
모든 은행 고객을 관리하는 DB를 2차원 배열로 선언한다.
모든 은행은 출금, 입금, 잔액조회, 계좌개설, 계좌번호 중복검사, 로그인, 핸드폰 번호 중복검사 서비스가 있다.
화면쪽 메뉴는 "계좌개설, 입금하기, 출금하기, 잔액조회, 계좌번호 찾기(새로운 계좌발금, 해드폰 번호로 서비스 이용가능), 나가기"로 구성되어 있다.
은행
예금주
계좌번호(중복 없음)
핸드폰번호(중복 없음)
비밀번호
통장잔고
신한
입금 시 수수료 50%
국민
출금 시 수수료 50%
카카오
잔액조회 재산 반토막
은행은 3개를 선언한다.
모든 은행 고객을 관리하는 DB를 2차원 배열로 선언한다.
모든 은행은 출금, 입금, 잔액조회, 계좌개설, 계좌번호 중복검사, 로그인(계좌번호, 비밀번호), 핸드폰 번호 중복검사 서비스가 있다.
화면쪽 메뉴는 "계좌개설, 입금하기, 출금하기, 잔액조회, 계좌번호 찾기(새로운 계좌발급, 핸드폰 번호로 서비스 이용가능), 나가기"로 구성되어 있다.
계좌번호는 Random클래스를 사용하여 6자리로 설정한다.
계좌를 개설한 은행에서만 입금 서비스를 이용할 수 있다(instanceof)
각 은행별 인원 수를 담을 3칸 배열 선언(계좌 개설 시 신규 고객이 들어갈 열 번호)
각 은행별 객체 3개를 담을 3칸 배열 선언(계좌 개설 시 고객이 선택한 은행 객체)