* 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프로 맞지는 안지만 고쳐나갈 예정이다
'Java기초' 카테고리의 다른 글
| [Java] List 성적관리 (0) | 2022.07.07 |
|---|---|
| [Java] Interface and Inner Class (0) | 2022.07.05 |
| [JAVA] Class 관계 (has~ a) 포함오브젝트 활용 (0) | 2022.06.30 |
| [Java]클래스활용 성적관리프로그램(getter and setter)+has ~ a관계이해 (0) | 2022.06.28 |
| [Java] 성적처리 프로그램심화(array이해하기 (0) | 2022.06.24 |
댓글