day18_ParserTest6

육희영·2021년 10월 28일
0

인터페이스, 다형성 필기

package com.java1.day18;

//인터페이스를 이용한 다형성..
/**
 * 다형성에 대해 학습할때 자손클래스의 인스턴스를 조상타입의 참조변수로 참조 하는것이 가능 하다는 것을 배웠다.
 * 인터페이스 역시 이를 구현한 클래스의 조상이라 할수 있으므로 해당 인터페이스 타입의 참조변수로 이를 구현한 클래스의
 * 인스턴스를 참조할수 있으며, 인터페이스 타입으로의 형변환도 가능하다.
 * Fightable f = (Figthable)new Fighter();
 * Fingtable f = new Fighter();
 * 따라서 인터페이슨 다음과 같이 메서드의 매개변수의 타입으로 사용될 수 있다.
 * void attack(Fightable f) {
 * 		.....
 * }
 * attack메서드르 호출할 때는 매개변수로 Fightable 인터페이슬 구현한 클래스의 인스턴스를 넘겨주어야 한다.
 */
public class ParserTest6 {
	public static void main(String[] args) {
		Parseable parser = ParserManager.getParser("XML"); 
        parser.parse("document.xml"); 
        parser = ParserManager.getParser("HTML"); 
        parser.parse("document2.html"); 

	}
}

interface Parseable { 
    public abstract void parse(String fileName);       // 구문 분석작업을 수행한다. 
} 

class ParserManager { 
   // 리턴타입이 Parseable인터페이스이다. 
   //리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다. 	
    public static Parseable getParser(String type) {       
          if(type.equals("XML")) { 
             return new XMLParser(); 
          } else { 
             Parseable p = new HTMLParser(); 
             return p; 
             // return new HTMLParser();       위의 두 줄을 간단히 할 수 있다. 
          } 
    } 
} 

class XMLParser implements Parseable { 
    public void parse(String fileName) { //아래 코드에서 완성을 해주었으니까 abstract가 없어야된다.
        /* 구문 분석작업을 수행하는 코드를 적는다. */ 
          System.out.println(fileName + " - XML parsing completed."); 
    } 
} 

class HTMLParser implements Parseable { 
    public void parse(String fileName) { 
        /* 구문 분석작업을 수행하는 코드를 적는다. */ 
          System.out.println(fileName + " - HTML parsing completed."); 
    } 
} 

출력결과

document.xml - XML parsing completed.
document2.html - HTML parsing completed.

0개의 댓글

관련 채용 정보