본문 바로가기
Java

자바 중급 030. 다형성(polymorphism)- 부모클래스 참조변수로 자식클래스 접근

by Smart Factory in 2020 2021. 9. 22.
728x90
반응형

안녕하세요. 스마트 팩토리입니다 

자바 중급 030. 다형성(polymorphism)- 부모클래스,자식클래스에 대해 알아보겠습니다. 

1. 다형성

가. 다형성(polymorphism)

-여러가지 형태를 취하는 것
- 하나의 참조 변수로 여러가지 객체를 참조할 수 있는 것.
-조상의 참조변수로 자손 타입의 객체를 다룰 수  있는 것.

다형성을 설명하기 위해서는 여러가지를 알아야 하는데 하나씩 알아보면서 이해의 폭을 넓혀가보도록 하겠습니다. 

<< Tv.java  부모 클래스 >>

부모클래스로 
인스턴스 변수로 코드명, 제품생산량, 생산월을 가지고 있습니다. private로 되어 있어서 getter를 활용하여 접근하도록 설정하였습니다. 

info 메소드를 활용하여 객체를 생성하면 해당 메소드를 실행할 수 있도록 하였습니다. 

package ex05;

public class Tv {
private String code;
private int productivity;
private int month;

public Tv(String code, int productivity, int month) {  --> 생성자
super();
this.code=code;
this.productivity=productivity;
this.month=month;
}

public String getCode() {  --> getter
return code;
}

public int getProductivity() {  --> getter
return productivity;
}

public int getMonth() {  --> getter
return month;
}
public void info() {
 System.out.println(" 제품 코드 :"+this.getCode());
 System.out.println(" 제품 생산량 :"+this.getProductivity());
 System.out.println(" 제품 생산월 :"+this.getMonth());
}
}

<< SeoulTv.java 자식 1 번 클래스 >>

자식 클래스로 부모 클래스의 생성자를 그대로 가지고 오고, 그에 자식 클래스의 멤버 변수 Area를 추가하였습니다. 

오버라이딩을 통해서 부모 클래스의 info 메소드에 생산지를 추가하였습니다. 

package ex05;

public class SeoulTv extends Tv {
    private String Area;

public SeoulTv(String code, int productivity, int month, String area) {
super(code, productivity, month);
this.Area = area;
}

public String getArea() {
return  this.Area;
      }

@Override
public void info() {
super.info();
System.out.println(" 생산지 : "+this.getArea());
}
    
}

<< IncheonTv2.java  자식클래스2번>>

자식 클래스로 Tv 클래스를 상속 받으면 수입국지역을 변수로 만들어, 메소드에 부모의 메소드+ 수입국 을 출력하는 메소드를 오버라이딩했습니다.

package ex05;

public class IncheonTv2 extends Tv {
    private String Area;

public IncheonTv2(String code, int productivity, int month, String area) {
super(code, productivity, month);
this.Area = area;
}

public String getArea() {
return  this.Area;
      }

@Override
public void info() {
super.info();
System.out.println(" 수입국(인천): "+this.getArea());
}
    
}

<<PusanTv.java 자식 클래스 3번>>

 

자식 클래스로 역시 수입국 지역 변수를 추가하고 오버라이딩을 통해서 출력되도록 하였습니다. 

package ex05;

public class PusanTv extends Tv {
    private String Area;

public PusanTv(String code, int productivity, int month, String area) {
super(code, productivity, month);
this.Area = area;
}

public String getArea() {
return  this.Area;
      }

@Override
public void info() {
super.info();
System.out.println(" 수입국(부산): "+this.getArea());
}
    
}

 

<<TvEx.java  메인 클래스>>

 

Tv t1=new Tv("A02",1000, 9);
    t1.info();

객체 t1은 기본 방식대로 다형성 적용 없이 Tv클래스를 적용하여 해당 인스턴스 변수 값을 넣고 출력한 값입니다. Tv t1=new Tv("A02",1000, 9);
    t1.info();

 Tv t2=new IncheonTv2("B032",500,9,"china");
   t2.info();

 부모 클래스의 참조변수를 작성하고 자식 클래스를 객체를 접근하여 다루고 있습니다. 
이것이 가능한 것이 바로 다형성입니디ㅏ. 

 

다형성은 다양하게 접근할 수 있기 때문에 여기서는 기존에 해당 클래스만 접근하던 것과 달리 조상 클래스에서 자식클래스로 접근할 수 있다는 것을 아는게 포인트라고 할 수 있습니다. 

t3, t4, 도 역시 같은 방식으로 자식 클래스로 접근하고 있습니다. 

package ex05;

public class tvEx {
public static void main(String[] args) {
Tv t1=new Tv("A02",1000, 9);
    t1.info();
    System.out.println();
   Tv t2=new IncheonTv2("B032",500,9,"china");
   t2.info();
      
   System.out.println();
   
   Tv t3=new SeoulTv("A02",1000,9,"구로공단");
   t3.info();
   
   System.out.println();
   Tv t4=new PusanTv("C051",200,9,"말레이시아");
    t4.info();
   }
}
728x90
반응형

댓글