✔️상위 클래스에 템플릿에 해당하는 메소드가 있고 그 메소드 정의 안에는 추상메소드가 사용되고 있음 (상위 클래스: 뼈대 역할)
✔️그 추상 메소드를 하위 클래스가 구현함 (하위 클래스: 구체적 구현)
✔️상속을 이용해서 프로그램의 동작을 변경함.

>장점 & 언제 사용?

✔️하위 클래스에서 알고리즘을 일일이 기술할 필요가 없음
✔️상위 클래스형의 변수에 하위 클래스의 어떠한 인스턴스를 대입해도 제대로 작동된다.


✏️예제] '문자나 문자열을 5회 반복해서 표시하기'

클래스의 종류 4가지

📌AbstractDisplay: display-> 템플릿 메소드.
display 메소드안에 open, print, close 세가지의 메소드가 사용됨 -> 추상 메소드
📌CharDisplay: open, print, close 구체적 구현
📌StringDisplay: open, print, close 구체적 구현
📌Main: 동작 테스트 클래스


AbstractDisplay 추상 클래스

display-> 구현됨,
open, print, close -> 구현안됨 : 하위 클래스에서 구현 (추상 메소드)

public abstract class AbstractDisplay{

	public abstract void open();
    public abstract void print();
    public abstract void close();
    
    
    public final void display(){
    
    	open();
        for (int i=0; i<5; i++){
        	print();  //5번 호출 
         
            }
       	close();    //display 에서 구현되는 내용 
    
    }

}

CharDisplay 클래스

open; "<<" 표시
print; 생성자에서 주어진 1문자를 표시
close; ">>" 표시


public class CharDisplay extends AbstractDisplay{

	private char ch;    //표시 문자
    private int width ; 바이트 단위로 계산한 문자열 길이 
    public CharDisplay(char ch){
    	this.ch=ch;   //생성자에 문자 기억 
       
        }
        
        
        
   public void open(){     //구체적 구현 
   		System.out.print("<<");
   }
   
   public void print(){
   		System.out.print(ch);  //전달 받은 문자 출력 
   
   }
   
    public void close(){     //구체적 구현 
   		System.out.print(">>");
   }
      

}

StringDisplay 클래스

open(); "+---------+" 표시
print(); 생성자에서 주어진 문자열을 "|"와 "|" 사이에 표시
close(); "+---------+" 표시



public class StringDisplay extends AbstractDisplay{

	private String str;    //표시 문자
    private int width; //문자열의 비트수 
    
    public StringDisplay(String str){
    	this.str=str;   //생성자에 문자 기억 this.width=string.getBytes().length;  //바이트 단위 길이 필드에 저장 
        }
        
        
        
   public void open(){     //구체적 구현 
   		printLine();
   }
   
   public void print(){
   		System.out.print("|" + str +"|");  //전달 받은 문자 출력 
   
   }
   
    public void close(){     //구체적 구현 
   		printLine();   //문자열을 비트수 맞춰서 출력 
   }
   
   
   
   public void printLine(){
   		System.out.print("+");
        for(int i=0;i<width;i++){
        	
        System.out.print("-");
        
        }
   
   		System.out.print("+");
   }
      

}

main class


public class main{
	public static woid main(String[] args) {
    
    
    AbstractDisplay.d1=new CharDisplay('H');
    AbstractDisplay.d2=new StringDisplay('Hello world!');
    
    d1.display();   //실제 동작은 하위 클래스 CharDisplay, StringDisplay 에서 한다.
    
    
    d2.diaplay();
   
    
    }
    
}


profile
Why.Not.Now

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN