3-8. 1)다형성

zhyun·2020년 8월 29일
0

java

목록 보기
3/11

다형성이란?

조상클래스 타입의 참조변수로 자손의 인스턴스를 참조

(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로 사용이 불가능하다.

반대로
자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 불가능

  1. FireCar fc1 = new Car(); // 컴파일 에러
  2. FireCar fc2 = (FireCar) new Car(); //런다임 에러

(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(){}
}
profile
HI :)

0개의 댓글