(ex)1
class Car{
String color;
int door;
void drive(){}
}
class FireCar extends Car(){
void water(){}
}
//조상타입 : Car , 자손의 인스턴스 : FireCar(); 참조예시
FireCar fc = new FireCar();
Car c = new FireCar();
Car타입의 참조변수 c로는 FireCar인스턴스 중에서
Car클래스의 멤버들(상속받은 멤버들)만 사용할 수 있다.
즉, FireCar클래스 안에 water()는 참조변수c로 사용이 불가능하다.
반대로
자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 불가능
(EX)2
public class PolyTest{
public static void main(String[] args){
//1. SmartTv 3대를 저장
SmartTv stv1 = new SmartTv();
SmartTv stv2 = new SmartTv();
SmartTv stv3 = new SmartTv();
SmartTv[] stv = {stv1, stv2, stv3};
//SmarTv[] stv = new SmarTv[3];
//2. AfreecaTv 2대를 저장
AfreecaTv atv1 = new AfreecaTv();
AfreecaTv atv2 = new AfreecaTv();
AfreecaTv[] atv = {atv1, atv2};
// AfreecaTv[] atv = new AfreecaTv[2];
DMBTv dtv1 = new DMBTv();
DMBTv dtv2 = new DMBTv();
DMBTv[] dtv = {dtv1, dtv2};
// DMBTv[] dtv = new DMBTv[2];
//Tv[] t = new Tv[7];
Tv[] t = {stv1, stv2, stv3, atv1, atv2, dtv1, dtv2};
t[2] =(Tv)stv3; // up-casting, (Tv)생략가능
Tv[] t2 = t[3];
SmartTv st2 = (SmarTv)t2; //down-casting '캐스팅연산자' 생략불가
st2.internet(); // SmartTv의 인스턴스 크기를 알고있다.
SmartTv tt = (SmartTv) new Tv(); // 에러는 안뜨지만 실행은 안댐
}
}
class Tv{
int volume;
String color;
void changecolor(String color){
this.color = color;
}
}
class SmarTv extends Tv{
void internet(){}
}
class AfreecaTv extends TV{
void starBallon(){}
}
class DMBTv extends Tv{
void antena(){}
}