티스토리 뷰

Programing/Java

Java1 - 22. 다형성

HNNN 2017. 5. 10. 14:38


 1. 다형성


  부 모= 자식 ;


 ▷ 다형성 - 다양한 상태(모양)
 
 ▷ 하나의 이름에 대하여 여러가지 설정을 담고 있는 상태
    "다양하다"
  
 ▷ 메서드가 상속을 하다보면  여러개의 기능으로 재정의 될 수 있다.
  
 ▷ 한 이름에 여러개의 재정의된 메서드를 사용하고 싶을 때 다형성이라는 문법을 적용하면 된다.
    -->  자식 재정의 메서드가 호출된다
  ( 재정의를 해놓지 않았으면.. 그냥 부모가 호출하면 된다 )


#실습


package polyex;
class Phone{
 void call(){
  System.out.println("전화를 걸다");
 }
}
class Phone2G extends Phone{
 void call(){
  super.call();
  System.out.println("단축번호 기능을 이용해서 전화를 걸다 (자식)");  
 }
}
class Phone3G extends Phone2G{
 void call(){
  super.call();
  System.out.println("화상전화 기능을 이용해서 전화를 걸다 ");
 }
}

public class PolyTest {

 public static void main(String[] args) {


  Phone3G p3=new Phone3G();
  p3.call();
  //25-->14-->15-->8-->9-->3-->4(문장 출력)-->5-->9->10(문장 출력)-->11-->15-->16(문장 출력)-->17-->25
 }

}






#실습


▷ 상속에 있어서 대입 여부 
▷ 자식 <  부모 
▷ Phone(제일 큰 부모) > P2G > P3G
▷ 크다 = 어떤 자식이 오든 대입할 수 있다 라는 의미 (대입할 수 있다)
▷ 자식 ≠부모 (대입할 수 없다)
  
  ▷ 다양한 형태가 대입될수 있는 성질 => 다형(타입)성

  ▷ 다형적 대입 : 부모는 자식 인스턴스(객체)를 대입  받을 수 있다


package polyex;


class Phone2{
 void call(){
  System.out.println("전화를 걸다");
 }
}


class Phone2G2 extends Phone2{
 void call(){
  super.call();
  System.out.println("단축번호 기능을 이용해서 전화를 걸다 (자식)");  
 }
}


class Phone3G2 extends Phone2G2{
 void call(){
  super.call();
  System.out.println("화상전화 기능을 이용해서 전화를 걸다(자식2) ");
 }
}


public class PolyTest2 {

 public static void main(String[] args) {


  Phone2 phone2  =  null;   //아직  인스턴스를 연결시키지 않았다.
  
  phone2 = new Phone2();  //자기 자신의 인스턴스가 올 수 있다.
  
  phone2.call();  //자기 인스턴스가 메서드 실행한다.  "전화를 걸다" 가 호출!
      //왜?  인스턴스가  Phone2 이므로!!
  
  //자식 인스턴스를 대입시킬 수 있다 : 다형성
  phone2 = new Phone2G2();
  
  phone2.call(); //상황이 달라진다. 똑같은 메서드 호출이지만
      //다른 내용이 나온다.  "자식 인스턴스 타입으로 나온다"
  
  phone2 = new Phone3G2();
  phone2.call(); //자식인스턴스 타입으로 나옴
  
 }

}



※  메서드가 상속을 하다보면  여러개의 기능으로 재정의 될 수 있다.
  
 ▷  한 이름에 여러개의 재정의된 메서드를 사용하고 싶을 때
 ▷  다형성이라는 문법을 적용하면 된다.




 *추상클래스


 - 클래스를 추상화 시켜 놓는다 추상화 <--> 구체화
 - 구체적이지 않다 - 직접적으로 사용할 수 없는 상태
 - 추상적인 개념, 관념적이다
 
 - 클래스 들을 하나로 묶어주는 구심점(카테고리) 역할을 수행시킨다
 - 실채화(구체화) 시킬 순 없다 == new 라는 인스턴스를 붙일 수 없다
  "에러!'
  객체는 만들 수 있다


  ex)

    추상 클래스 tv 가 있을 때

    new TV(); 에러
    TV  tv; 객체는 허용을 한다


    tv = new TV() 에러 인스턴스를 못만들어서 에러다


    TV 는 다른 클래스(자식)들을 위해서 존재한다

    class Lcd extends TV{} --> Lcd 클래스를 만들 떄 TV클래스가 도와준다
 
    tv= new Lcd() 가 대입될 수 있게 된다(0)
     추상 클래스 객체는 자식 인스턴스를 받을 수 있다


 - 다른 클래스를 도와주기 위해서 만드는 것
   (helper )
 - 다형성에 기반이 된다




#실습


package modulex;

public class TV {
 private String type;
 
 public void tvInfo(){
  System.out.println("tv입니다");
 }

}



package modulex;

public class ColorTV extends TV{
 
 @Override // 재정의


 public void tvInfo(){
  System.out.println("color"+"TV입니다");
 }

}


package modulex;

public class Lcd extends TV {


 @Override // 재정의


 public void tvInfo(){
  System.out.println("Lcd"+"TV입니다");
 }

}



package modulex;

public class Led extends TV{
 
 @Override // 재정의


 public void tvInfo(){
  System.out.println("Led"+"TV입니다");
 }

}


 

package polyex;


import modulex.ColorTV;
import modulex.Lcd;
import modulex.Led;
import modulex.TV;


public class PolyTest3 {


  static void choiceTv(TV tv){
   tv.tvInfo();
  }


  public static void main(String[] args) {
   TV tv = new TV();
   tv.tvInfo();


   Lcd lcd = new Lcd();
   Led led = new Led();
   ColorTV cT= new ColorTV();
   
   choiceTv(led);
   choiceTv(lcd);
   choiceTv(cT);
   
  }
 

}


static void choiceTV(Lcd tv){
  tv.tvInfo();
 }
 static void choiceTV(Led tv){
  tv.tvInfo();
 }
 static void choiceTV(ColorTV tv){
  tv.tvInfo();
 }

---------------------------------------------

  tv = lcd;
  tv.tvInfo();
  tv = led;
  tv.tvInfo();
  tv = cTv;
  tv.tvInfo();
  

TV tv = new TV();

Lcd lcd = new Lcd();
Led led = new Led();
ColorTV cTv = new ColorTV();






-----------------------------------------------

choiceTV(lcd);
choiceTV(led);
choiceTV(cTv);



// 훨씬 간단하게 표현 가능


// 재정의 안한 상태

package modelex;

public class Uhd extends TV {

}


choiceTv(new Uhd());// 재정의 안한 상태 ->"그냥 부모거 호출한다"



# 실습 (과제 중 )

'Programing > Java' 카테고리의 다른 글

Java2 - 02. 패키지 Object- toString  (0) 2017.05.11
Java2 - 01. 예외처리  (0) 2017.05.10
Java1 - 21. 재정의(override)  (0) 2017.05.10
Java1 - 20. Inheritance(상속)  (0) 2017.05.04
Java1 - 19. Static  (0) 2017.05.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함