본문 바로가기
Java기초

[Java]동적바인딩 정적바인딩

by jackypark 2022. 7. 5.

 *  final
   1. field => 상수화
   2. method => 오버라이딩 금지
   3.  class => 상속금지 ,has a관계로 사용해라 final이 없으면 상속관계를 쓰던지 has a관계를 사용할수 있지만 final이 있으면 has a 관계만 사용가능
  
   동적바인딩 
   -상속 관계일때 부모의 레퍼런스로 자식객체를 접근하는 방식. 
   -부모의 레퍼런스로 인식할 수 있는 범위는 부모의 원래 알고 있는 것 까지만(그니깐 부모가 가지고 있는것만 쓸수있다는말임)
 
   동적 바인딩을 하든 정적 바인딩을 할 수 있게한다

예제 코드

import java.util.Scanner;

/*
 *  추상클래스 stack que
 */

 abstract class Memory{
	 int []a;
	 int index;
	 Memory() {
		 a=new int[5];
		 index=0;
	 } 
	 public abstract void pop();	 
	 public final void push(int num) { // 오버라이딩 금지 확실한 코딩하자
		 a[index]=num;
		 System.out.println("삽입한 수:"+a[index]);
		 index++;
	 }	 
 }
 
 	class MyStack extends Memory{

		@Override
		public void pop() {			
			System.out.println(a[index-1]);
			index--;
		}
 	}
 	class MyQue extends Memory{
 		int cnt;
 		int c;
 		MyQue(){
 			cnt=0;
 		}
 		@Override
		public void pop() { 
 				if(index==5&&cnt!=0) {
 					c=cnt;
 					for(int i=0;i<index;i++) {
 							a[i]=a[c-1];
 							c++;
 					}
 				}
 				System.out.println(a[cnt]);
 				cnt++;
 				index--;			
 		} 		
 	}

public class Day8 {
	public static void main(String[] args) {
		MyStack ms=new MyStack();
		MyQue mq=new MyQue(); //정적 바인딩
		Memory m = null;
		Scanner sc=new Scanner(System.in);
		int n,n1,n2;
		for(;;) {
			System.out.println("1.Stack 2. Que 0.종료");
			n=sc.nextInt();
//			if(n==1) {
//				m=ms; //동적 바인딩
//			}else if(n==2) {
//				m=mq;
//			}else if(n==0) {
//				break;
//			}
			if(n==0) {
				break;
			}
			
			for(;;) {
				System.out.println("1.push 2.pop 0.pupo종료");
				n1=sc.nextInt();
				if(n1==1) {
					System.out.println("push할 숫자를 입력하시오");
					n2=sc.nextInt();
					if(n==1) {
						ms.push(n2);
					}else if(n==2) {
						mq.push(n2);
					}
					//m.push(n2);	
					
				}else if(n1==2) {
					System.out.print("pop한 수: ");
					if(n==1) {
						ms.pop();
					}else if(n==2) {
						mq.pop();
					}
					//m.pop();
				}else if(n1==0){
					break;
				}	
			}
		}
	}
}

que구현은 아직 예외처리를 안해서 100프로 맞지는 안지만 고쳐나갈 예정이다
 

댓글