자바공부하기 107

upcasting과 downcasting의 실제 구현

 

import java.util.Vector;

 

public class upDownCasting {

public static void main(String[] args) {

String name = new String("홍길동");

Integer id = new Integer(1000);

Vector v = new Vector();

v.addElement(name);

v.addElement(id);

 

//upcasting

Object obj1 = v.elementAt(0);

Object obj1 = v.elementAt(1);

 

//Downcasting

String str = (String)obj1;

Integer num = (Integer)obj2;

System.out.println("이름:" + name + "번호:" +num);

String str2 = (String)v.elementAt(0);

Integer num2 = (Integer)v.elementAt(1);

System.out.println("이름" + name + "번호:" + num);

}

}

 

- Vector는 객체 저장소 / Object형만을 저장할 수 있음

- 저장은 Upcasting / 추출은 Downcasting

 

 

 

 

자바공부하기 106

Downcasting

 

- 하위클래스로의 형 변환

- 상위클래스(Super Class) ->하위클래스(Sub Class)

- 원칙적으로 불가능함 (상위 클래스는 하위 클래스의 서브타입이 아님)

- Downcasting의 기법을 제공

: 명시적인 캐스팅

* 컴파일러에게 지금 이 객체는 타입정보면 볼 때는 서브타입이 아니지만, 실제 메모리에 담긴 놈은 서브타입인 놈이 담겨있을 거니까 에러 발생시키지 말고 그냥 서브타입인 것처럼 쓰라고 지시하는 과정

 

 

 

자바공부하기 105

 

추상클래스와 Interface의 Upcasting

 

* 자체적으로 객체 생성이 불가능

-  Upcasting 기법을 통해 객체 생성

-  가상 메서드를 통한 객체 은닉 구현

 

 

자바공부하기 104

 

 

Upcasting의 구현

 

* Upcasting시 메모리 구조

- shape c1 = new circle();

 

 

 

 

 

 

* Upcasting시의 메서드 사용법

- 상위클래스에 선언된 메서드만 사용가능

- 하위클래스에서 재정의된 메서드가 호출

 

 

 

 

자바공부하기 103

Upcasting

 

: 상위클래스로의 형변환

: 하위클래스 (Super Class) -> 상위클래스(Sub Class)

: 컴파일러에 의해 자동변환

: 상속계층의 측면고려

: 하위클래스는 상위클래스의 서브타입이다.

 

 

 

class shape {

public void draw() {

System.out.println("모양을 그립니다");

}

public void delete() {

System.out.println("모양을 지웁니다");

}

}

 

class Circle extends Shape {

public void draw() {

System.out.println("원을 그립니다");

}

public void delete() {

System.out.println("원을 지웁니다")

}

public void sayCircle() {

System.out.println("안녕하세요 원입니다.");

}

}

 

public class UpcastingClassTest {

public static void main(String[] args){

Shape s = new Shape();

s.draw();

s.delete();

System.out.println();

//클래스의 기본적인 사용법

Circle c = new Circle();

c.draw();

c.sayCircle();

System.out.println();

//Upcasting의 사용

Shape c1 = new Circle();

c1.draw();

c1.delete();

//c1.sayCircle(); 에러가 발생합니다.

System.out.println();

Circle cc = new Shape();

}

}

 

 

 

자바공부하기 102

Casting 이란

* 객체들의 형 변환

: 상속관계의 객체들에 한함

 

* 큰 메모리(하위클래스) -> 작은 메모리(상위클래스)

: 묵시적으로 가능

: Upcasting

 

* 작은 메모리(상위클래스) -> 큰 메모리(하위클래스)

: 묵시적으로 불가능

: Casting 연산자인 ()를 사용해서 형을 명시해야 함

: Downcasting

 

* 기본데이터 타입의 형 변환은 별개

 

 

.. 다음시간에는 Upcasting에 대해서 알아보도록하겠습니다. ^^

 

 

 

자바공부하기 101

벌써 자바공부하기 101번째 글이네요..^^

앞으로 계속 자바열공!!

 

추상클래스 VS 인터페이스

 

* 유사점

- 하위클래스에서 모든 추상 메서드를 구현해야함

- Upcasting이 가능함

 

* 차이점

-추상클래스

: 추상메서드 외 일반 멤버변슈와 메서드를 가질 수 있다.

: extends를 사용

: 단일 상속만 가능

: 작업의 레벨 분할을 위해서 사용

 

- Interface

: 추상 메서드와 static final 변수만 사용

: Implements를 사용

: 중복 구현 가능

: 공동작업을 위한 상호간의 인터페이스를 위해 사용

 

 

 

 

 

 

 

JAVA공부하기 100

Marker 인터페이스

 

- 어떤 인터페이스는 아무런 메소드도 선언하지않고 어떤 일반적 특성을 가진 클래스임을 선언하는데 사용

 

- 아무런 필드나 메소드 선언하지 않고있다

 

- 예를 들면 Cloneable, Serializable, EventListener 이 있음

 

- RTTI과 혼합되어 사용할 경우, 어떤 클래스가 특정한 목적으로 사용될 수 있음을 표현하는 효과적인 수단이 된다. (RTTI는 이후에 알아봄)

 

 

 

 

+ Recent posts