1. casting
1) up casting
: 부모 타입에 자식 값이 들어있는 기법
부모클래스명 객체 = new 자식생성자();
** 부모와 자식간에 공통요소(재정의 메소드)만 사용 가능하며,
자식 클래스의 추가된 것들은 사용할 수 없다.
** 부모 타입으로 선언되었기 때문에 부모의 필드만 사용 가능하지만
자식 클래스에서 재정의 했다면, 재정의 된 메소드로 사용된다.
2) down casting
: 자식 타입에 부모 값이 들어가는 기법
자식클래스명 객체 = (자식클래스명) 업캐스팅된 인스턴스된 클래스;
** 자식 클래스 타입으로 부모 생성자를 호출하면 오류 발생
Why? 부모의 범위가 더 크기 때문에 자식에 담을 수 없다.
** 부모클래스로 업캐스팅 되었던 클래스를 다시 본래의 자식클래스로 형변환하는 것을 다운캐스팅이라고 함
(즉, 업캐스팅 된 것을 원상 복구하는 것)
2. 자식 클래스의 객체들은 모두 부모 타입이다.
3. 오늘 실습코드
1) Casting
package day23;
class Car{
String brand;
String color;
int price;
public Car() {}
public Car(String brand, String color, int price) {
super();
this.brand = brand;
this.color = color;
this.price = price;
}
void engineStart() {System.out.println("열쇠로 시동 킴");}
void engineStop() {System.out.println("열쇠로 시동 킴");}
}
class SuperCar extends Car{
String mode;
public SuperCar() {}
public SuperCar(String brand, String color, int price, String mode) {
super(brand, color, price);
this.mode = mode;
}
@Override
void engineStart() {System.out.println("음성으로 시동 킴");}
@Override
void engineStop() {System.out.println("음성으로 시동 끔");}
void openRoof() {System.out.println("지붕 염");}
void closeRoof() {System.out.println("지붕 닫음");}
}
public class Casting {
public static void main(String[] args) {
Car matiz = new Car();
SuperCar ferrari = new SuperCar();
//up casting
Car noOptionFerrari = new SuperCar();
noOptionFerrari.engineStart();
//down casting
//무조건 up casting한 것만 down casting 가능, 안그럼 오류남
SuperCar optionFerrai = (SuperCar) noOptionFerrari;
optionFerrai.openRoof();
}
}
2) 은행!
** 아직 완성 전, 다음 수업 시간에 완성하기로 함 **
** ATM 메인 클래스 **
import java.util.Random;
import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
String msg = "1.신한은행\n2.국민은행\n3.우리은행\n4.나가기";
String menu = "1.계좌개설\n2.입금하기\n3.출금하기\n4.잔액조회\n5.나가기";
Scanner sc = new Scanner(System.in);
Random r = new Random();
String name = "", pw = "", account = "", temp = "";
int choice = 0, menu_choice = 0;
while(true) {
System.out.println(msg);
choice = sc.nextInt();
if(choice == 4) {break;}
choice --;
while(true) {
System.out.println(menu);
menu_choice = sc.nextInt();
if(menu_choice == 5) {break;}
switch(menu_choice) {
case 1:
Bank[] arBank = {new Shinhan(), new Kookmin(), new Woori()};
while(true) {
account = "" + (r.nextInt(90000) + 10000);
if(Bank.checkDup(account) == null) {break;}
}
arBank[choice].account = account;
arBank[choice].name = "";
arBank[choice].pw = "";
//사용자가 선택한 은행(행 : choice)에
//arCnt[choice]번째 고객으로
//신규고객(arBank[choice]) 저장
Bank.arrBank[choice][Bank.arCnt[choice]] = arBank[choice];
//사용자가 선택한 은행의 고객 수 1증가
Bank.arCnt[choice]++;
break;
case 2:
break;
case 3:
break;
case 4:
break;
}
}
}
}
}
** Bank 클래스 **
package day23;
public class Bank {
static Bank[][] arrBank = new Bank[3][100];
static int[] arCnt = new int[arrBank.length];
String name;
String account;
String pw;
int money;
public Bank() {}
//중복검사
static Bank checkDup(String account) {
Bank b = null;
for(int i=0; i<arrBank.length; i++) {
for(int j = 0; j < arCnt[i]; j ++) {
if(arrBank[i][j].account.equals(account)) {
b = arrBank[i][j];
break;
}
}
}
return b;
}
//로그인
void login(String account, String pw) {
checkDup(account);
}
//입금
void deposit(int money) {
this.money += money;
}
//출금
void withdraw(int money) {
if(!(this.money - money < 0)) {
this.money -= money;
}
}
//잔액조회
void balance() {
System.out.println("현재 잔액 : " + this.money + "원");
}
}
** Shinhan 클래스 **
package day23;
public class Shinhan extends Bank{
//입금시 수수료 10%
@Override
void deposit(int money) {
this.money -= money * 0.9;
}
}
** Kookmin 클래스 **
package day23;
public class Kookmin extends Bank{
//출금시 수수료 50%
@Override
void withdraw(int money) {
this.money -= money * 0.5;
}
}
** Woori 클래스 **
package day23;
public class Woori extends Bank{
//잔액 조회시 재산 반토막
@Override
void balance() {
this.money *= 0.5;
}
}
3. 단축키
** 메소드 이름 중 일부 작성 + Ctrl + Space : Override
'웹_프론트_백엔드 > 단과' 카테고리의 다른 글
[단과_JAVA] 2020.02.17 (0) | 2020.02.17 |
---|---|
[단과_C] 2020.02.14 (0) | 2020.02.15 |
[단과_C] 2020.02.13 (0) | 2020.02.14 |
[단과_JAVA] 2020.02.13 (0) | 2020.02.14 |
[단과_JAVA] 2020.02.12 (0) | 2020.02.12 |