18일차 upcasting & 싱글톤패턴

박현정·2022년 4월 19일
0

JAVA 독학

목록 보기
23/26

upcasting

부모 클래스 타입으로 자식 생성자를 호출하는 것.
부모와 자식간의 공통요소(재정의 메서드)만 사용 가능하며,
자식 클래스의 추가된 것들은 사용할 수 없다.
부모 타입으로 선언되었기 때문에 부모의 필드만
사용 가능하지만 자식 클래스에 재정의 했다면,
재정의 된 메서드로 사용된다. 
부모클래스명 객체 = new 자식생성자();

down casting

자식 클래스 타입으로 부모 생성자를 호출하는 오류
부모의 범위가 더 크기 때문에 자식에 담을 수 없다.
  • 각각의 타입을 확인할 때 사용하는 문법
  • 조건식 참/거짓
    값 instanceof 클래스타입 : 값이 클래스 타입이니?

(실습 예제)

class Car{
String brand;
String color;
int price;

public Car() {}

public Car(String brand, String color, int price) {

	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;
		}

	void changeMode(String newMode) {
		this.mode = newMode;
		System.out.println("모드가 바뀌었습니다.");
	}
	
	@Override
	void engineStart() {
	System.out.println("음성으로 시동 킴");
	}
	@Override
	void engineStop() {
	System.out.println("음성으로 시동 끔");
	}
	}
	
	

public class CastingTest {
  public static  void main(String[] args) {
   //up casting 자식 생성자 불러오는 것 자식클래스에서 새로만든것(mode)를 사용할수는 없으나,
   //부모클래스에서 있던걸 재정의하니까 되는구나~!
   Car noOptionFerrari = new SuperCar();
  //	 noOptionFerrari.engineStart();	
  //	 //down casting : 오류다!
  //	 SuperCar brokenCar = (SuperCar) new Car();
  //	 //값앞에다 자료형 붙여서 강제형변환
  //	 brokenCar.changeMode("스포츠");
  //	 //응안됨 

   Car car = new Car();
   SuperCar ferrari = new SuperCar();

   if(car instanceof Car) {
       System.out.println("nice casting");
   }else {
       System.out.println("err : wrong casting");
   }

   if(ferrari instanceof Car) {
       System.out.println("nice castig");
   }else {
       System.out.println("err : wrong casting");
   }

   if(car instanceof SuperCar) {
       System.out.println("nice casting");
   }else {
       System.out.println("err : wrong casting");
   }//자동차를 수퍼카에 담을수가 없어서!범위를 벗어났기때문에


   if(noOptionFerrari instanceof Car) {
       System.out.println("nice casting");
   }else {System.out.println("err : wrong casting");
   //내가 업캐스팅해도 타입만 맞으면 그 자동차 타입
   }
  }}

싱글톤 패턴(Singleton Pattern)

객체가 단 1개만 존재할 때 외부에서 new를 하지 못하게
막아주고 클래스 내부에서 new를 한 후 외부에서 선언이 아닌
사용만 해준다.

profile
Gut Beginer

0개의 댓글