JAVA공부하기 110

instanceof

 

//InstanceofTest1.java

class Element {int atomicNumber;}

class Point extends Element {int x, y;}

class InstanceofTest1 {

public static void main(String[] args) {

Element e = new Element();

Point p = new Point();

if (e instanceof Point) {

Stystem.out.println("First Test : I get your point !");

p = (point)e;

}

e = p;

if (e instanceof Point) {

System.out.println("Second Test : I get your point!");
p = (Point)e;

}

if (e instanceof Element) {

System.out.println("Third Test : I get your Element!");

p = (point)e;

}

}

}

 

 

 

 

JAVA공부하기 109.

instanceof

- Instanceof 키워드는 좌우의 객체, 클래스가 서로 같은 계층에 있지 않을 경우 컴파일 에러를 발생시킨다.

 

- 좌측의 객체가 우측의 클래스로 캐스팅 될 수 있으면 true리턴

 

 

//InstanceofTest.java

class Element {int atomicNumber;}

class Point {int x, y;}

class InstanceofTest {

public static void main(String[] args) {

point p = new Point();

Element e = new Element();

if (e instanceof Point) { // compile-time error

System.out.println("I get your point!");

p=(point)e;    // compile-time error

}

}

 

 

 

자바공부하기 108

RTTI

 

- RTTI = Run-Time Type Information

 

-  Vector에 들어있는 Object가 실제 무슨 형인지 모르는 경우 컴파일은 되더라도 런타임타입캐스팅 에러 발생 가능성이 높다.

: ClassCastException

 

- 자바에서는 형 검사를 위해 instanceof 제공

 

- 사용방법

: 객체 instanceof 클래스

: 리턴값 true/false

 

 

 

 

↓↓

 

 

 

자바공부하기 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();

}

}

 

 

 

+ Recent posts