|
|
제목:인사동쌈지길
다형성이란?
여러가지 형태를 가질 수 있는 능력
한타입의 참조 변수를 여러 타입의 객체를 참조 하게 함
조상클래스 타입의 참조 변수로 자손클래스의 인스턴스를 참조
class A {}
기본
class B extends A{
A a=new a();
B a=new B();
}
class B extends A{
B b=new B();
A a=new B(); 가능
B b=new A(); 불가
}
조상타입의 참조변수 B로 자손 타입의 인스턴스 B를 참조 할수 있다.
반대로 자손타입의 참조변수 B로 조상타입의 인스턴스 A를 참조 할수 없다.
참조변수의 형변환
자손타입 →조상타입(UP-casting) :형변환 생략 가능
자손타입 ←조상타입(DOWN-casting): 형변환 생략 불가
class A{}
class B extends A{}
class C extends A{}
B b=(B)c; X
C c=(C)b; X
B와 C는 직접적인 관계가 없다.
B b=new B();
A a=b; //A a=(A)b; 생략
b2=(B)a; //형변환은 꼭 써줘야함
Object타입은 끝판왕이니까 다룰수 있는 멤버 개수가 많기 때문에 어떤 클래스 타입을 가지고와도 문제가 되지 않는다
그래서 형변환을 생략함
형변환은: 참조변수의 타입을 변환 인스턴스를 변환 x 참조 변수의 형변환은 인스턴스에 아무런 영향 x
단지. 참조 변수의 형변환을 통해 참조하는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절함
A a=null; A를 선언후 초기화
B b=new B(); 인스턴스를 생선 B타입의 참조변수가 참조하도록
a=b; b가 a를 참조하도록 한다
b2=(B)a;
A a=new A();
b=(B)a;에러 b=(B) a=new a(); A=B같다고 하는거랑 같음
조상 a타입의 인스턴스를 자손 b타입의 참조 변수를 참조하는것은 허용x
A a=new A(); 를 A a=new B();로 변경하면 b=(B)a; 가능
캐스트 연산자를 사용하면 서로 상속관계에 있는 클래스 타입의 참조 변수간의 형변환은 양방향으로 자유롭게 수행
그러나 참조변수가 참조 하고 있는 인스턴스의 자손타입으로 형변환을 하는 것은 허용x
instanceof연산자
인스턴스의 타입을 알아볼수 있다.
연산 결과값은 boolean값인 true,false
if( A instane of B){
실행할일
}else if(A instance of C){
실행할일
}
어떤 타입에 대한 instance of 연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 것
upcasting,downcasting
참조변수와 인스턴스의 연결
변수가 똑같이 정의되있을시
class A{int x}
class B extends A{int x}
A a=new B();
B b=new B();
위에서 불러올때 우선순위 A>B
또 별도로 B클래스에 정의 되있지 않으면 class B extends A {}
부모클래스의 변수값을 가져오기만 함.
super=위 클래스 불러와라~
this=지금 있는 클래스 내용 불러와라~
매개변수의 다형성
class A{}
class B extends A{}
class C extends A{}
class X{
void x(B b){할일}
void x(C c){할일}
}
대체→void x(A A){할일}
x의 일을 실행할때
최고우위에 상속이되어있다면
X x=new X();
x.x(b) or x.x(c) 로 입맛에 맛게 불러올수 있다.
public void print(object obj){
write(String.valueOf(obj));
}
public[누구나] static[어디서든,언제든] String[문자값으로 돌려줄게] valueOf[내이름](Object obj[받은값]){
return[이거돌려준다] (Obj == null)[obj값이 없다] ?[삼항연산자] "null"[조건이 true일떄 :앞에 값을 반환] : obj.toString()[조건이 falue일때 뒤에 값을 반환]; //문자열 반환
}
여러종류의 객체를 하나의 배열로 다루기
A a1=new B();
A a2=new C();
A a3=new D();
=A a[]=new A[3];
a[0]=new B();
a[2]=new C();
a[3]=new D();
Vector클래스
10개이상일경우 사용
내부적으로 Object타입의 배열을 가지고 있다. 배열에 객체를 추가하거나 제저 할수 있게 작성
'코딩 > Java' 카테고리의 다른 글
| 인터페이스(interface) (0) | 2016.03.24 |
|---|---|
| 추상클래스(abstract class) (0) | 2016.03.22 |
| 제어자(modifier) (0) | 2016.03.16 |
| 오버라이딩(overriding) (0) | 2016.03.16 |
| 상속(inheritance) (0) | 2016.03.16 |