Backend/JAVA_Basic

16. JAVA, final (final클래스, final메소드) & 연습문제

개발개발빈이 2022. 6. 2. 20:41

○ final

    - final, 마지막

    - final 변수 : 변수를 상수화

    - final 메소드 : 더 이상 리폼(override 재정의)할 수 없다

    - final 클래스 : 종단클래스, 후손클래스를 생성할 수 없다

 

○ final 변수

    - final 변수는 상수화된다, 다른 값 대입 불가능

int a=3;
a=5;     //변수는 다른 값 대입 가능

final int b=2;
b=4;     //에러, final변수는 다른 값 대입 불가능

 

○ final 클래스 (종단클래스)

    - final 클래스는 상속 받을 수 없다

final class Animal{}             // 종단클래스
class Elephant extends Animal{}  // 에러, final클래스는 상속 받을 수 없다

 

○ final 메소드

    - final 메소드는 override할 수 없다

class Fruit {
	void view() {}
	final void disp() {}
}


class Apple extends Fruit { // 자식클래스 extends 부모클래스

	@Override
	void view() {}  //override 가능
	
	@Override
	void disp() {}	//에러, final메소드는 override 불가능

}

 

● Practice 연습문제

    Q) 성적프로그램 OX 표시하기

    - 맞은 문제 O, 틀린 문제 X표시
    - 점수 : O당 20점씩
    - 등수 : 점수를 기준으로 높은 사람이 1등 (동점자 없다는 가정하에) 

 

    - Test04_ox 클래스 생성

package oop0407;

public class Test04_ox {

    public static void main(String[] args) {
		
        //학생 이름 및 제출한 답안지
        Jumsu[] students= {
            new Jumsu(1, "홍길동", 3, 4, 3, 3, 3)
           ,new Jumsu(2, "무궁화", 3, 3, 3, 3, 3)
           ,new Jumsu(3, "라일락", 1, 2, 1, 4, 3)
           ,new Jumsu(4, "진달래", 2, 3, 1, 3, 3)
           ,new Jumsu(5, "봉선화", 3, 3, 5, 2, 1)
        };
		
	}//main() end

}//class end

 

    - Jumsu클래스 생성

package oop0407;

public class Jumsu {

    //멤버변수 field
		
	private int no;                  //번호
	private String name;             //이름
	private char[] ox=new char[5];   //OX표시
	private int[] answer=new int[5]; //제출답안지
	public int score;                //점수
	public int rank;                 //등수

	
    //생성자함수 constructor
	
	public Jumsu() {}
	public Jumsu(int no, String name, int a0, int a1, int a2, int a3, int a4) {
			this.no=no;
			this.name=name;
			this.answer[0]=a0;
			this.answer[1]=a1;
			this.answer[2]=a2;
			this.answer[3]=a3;
			this.answer[4]=a4;
			this.rank=1;
	}
			
	
    //멤버함수 method
	
	public void compute() {
	
		int[] dap= {3, 3, 3, 3, 3}; //정답
    
		//Q1 코드작성영역
   					
	}//compute() end
		
		
	public void disp() {//출력하기
		System.out.print(no+" ");
		System.out.print(name+" ");
		System.out.print(ox[0]+" ");
		System.out.print(ox[1]+" ");
		System.out.print(ox[2]+" ");
		System.out.print(ox[3]+" ");
		System.out.print(ox[4]+" ");
		System.out.print(score+" ");
		System.out.print(rank+" ");
		System.out.println();
					
	}//disp() end
	
		
}//class end

 

    Q1) 정답(dap)과 제출한 답안지(answer)을 비교해서 OX구하고, 맞은 개수에 따라 점수(score)를 구하시오

//Q1)
for (int i=0; i<dap.length; i++) {
    if (dap[i]==this.answer[i]) {
        ox[i] = 'O';
    }else {
        ox[i] = 'X';
    }//if end
}//for end

int score=0;
for (int i=0; i<ox.length; i++) {
    if (ox[i]=='O') {
        score=score+20;
    }//if end
}//for end

this.score=score;


//강사님 코드//////////////////////////////////////////////
    for(int i=0; i<5; i++) {
        if(dap[i]==answer[i]) {
            ox[i]='O';
            score=score+20;	//한 문제당 20점씩
        }else {
            ox[i]='X';
        }//if end
    }//for end

 

    Q2) Test04_ox 에서 각 학생의 성적을 구하고, 점수를 기준으로 등수 구하기

//ox와 점수 계산하기
for(int i=0; i<size; i++) {
    students[i].compute();
}//for end

// score를 기준으로 등수 구하기
for(int i=0; i<size; i++) {//for1
    for(int j=0; j<size; j++) {//for2
        if(students[i].score<students[j].score) {
            students[i].rank++;
        }//if end
    }//for end
}//for end

//출력하기
for(int i=0; i<size; i++) {
    students[i].disp();
}//for end