정구리의 우주정복

[Java] 상속 , override 정복하기 본문

STUDY/K-DIGITAL

[Java] 상속 , override 정복하기

Jungry_ 2022. 9. 5. 22:53
반응형
  • ScoreParent.java -> 부모가 될 클래스 파일 //  이름,수학,영어,수학,총점,평균  에 대한 정보가 getter,setter가 있다 
  • ScoreSchild.java -> 자식이 될 클래스 파일 부모를 상속받고 음악,체육 에 대한 점수가 또 들어있다
  • ScoreMain.java -> 프로그램이 동작할 Main 클래스
  • ScoreService.java -> Main 에서 사용할 기능 구현

=> 점수들을 입력받고 , 출력받는 프로그램을 만들 것이다.

 

 

ScoreParent.java

package ch01.quiz02.case01;

public class ScoreParent {
	private String name;
	private int kor;
	private int eng;
	private int math;
	private int total;
	private double avg;
	
	//  Getter/Setter
	public String getName() {
		return name;
	}
	public int getKor() {
		return kor;
	}
	public int getEng() {
		return eng;
	}
	public int getMath() {
		return math;
	}
	public int getTotal() {
		return total;
	}
	public double getAvg() {
		return avg;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public void setTotal() {
		this.total = this.kor+this.eng+this.math;
	}
	public void setAvg() {
		this.avg = this.total / 3;
	}
	
	

}

해당 소스에는 필드들과 getter, setter 를 정의해줬다. 

특별히 신경 쓸 부분은 없고 setTotal() 과 setAvg() 정도만 보면 된다 

 

 

ScoreChild.java

package ch01.quiz02.case01;

public class ScoreChild extends ScoreParent{
	
	private int music;
	private int pe;
	
	
	
	public int getMusic() {
		return music;
	}

	public int getPe() {
		return pe;
	}

	public void setMusic(int music) {
		this.music = music;
	}

	public void setPe(int pe) {
		this.pe = pe;
	}

	@Override
	public int getTotal() {
		// TODO Auto-generated method stub
		int total = super.getTotal() + music + pe;
		return total;
	}
	
	@Override
	public double getAvg() {
		int avg = getTotal()/5;
		return avg;
	}
	
	@Override
	public String toString() {
		String msg = "### " + super.getName() + " ###\n";
		msg += "총점 : "+getTotal() + "\n";
		msg += "평균 : "+getAvg() + "\n";
		return msg;
	}
	
}

ScoreParent 를 extends 받았다 => 따라서 ScoreParent 의 fields , methods 를사용가능하다 

추가로 music , pe 변수를 새로 만들었다 이건 only ScoreChild 에서만 이용 가능하다.

 

@Override part를 보자 

@Override (재정의) 를 사용하려면 우선 기존 부모의 모습과 똑닮아야한다 그 외에는 새롭게 사용이 가능하다 

이번엔 int total = super.getTotal() + music + pe; 이렇게 해줬다

super 는 부모를 의미한다 따라서 call ScoreParent.getTotal() 을 통해 총 합을 가져와 ScoreChild 에만 있는 music 과 pe 의 값을 더해준다 

 

getAvg 는 별도의 설명을 하지 않겠음

 

toString() 은 기본적으로 정의되어있는 메소드이기 때문에 ScoreParent 에 적혀있지 않더라도 Override 가 가능하다.

재정의 ! 어렵지 않다 !!

 

 

ScoreMain.java

package ch01.quiz02.case01;

public class ScoreMain {

	public static void main(String[] args) {
		ScoreChild[] sc = new ScoreChild[5];
		ScoreService ss = new ScoreService();
		
		while(true) {
			int menu = ss.menu();
			
			switch(menu) {
			case 0:
				System.out.println("프로그램 종료");
				return;
			case 1:
				ss.input(sc);
				break;
			case 2:
				ss.output(sc);
				break;
			default:
				System.out.println("잘못 누르셨습니다");
			}
		}

	}

}

main 은 간단하게 구성했다 

 

 

ScoreService.java

package ch01.quiz02.case01;

import java.util.Scanner;

public class ScoreService {

	Scanner sc = new Scanner(System.in);
	static int count =0;
	public int menu() {
		System.out.println("1. 입력");
		System.out.println("2. 출력");
		System.out.println("0. 프로그램 종료 ");
		System.out.print(">>>");
		int num = sc.nextInt();
		
		return num;
	}
	
	public void input(ScoreChild[] schild) {
		if(count == 5) {
			System.out.println("더이상 추가 불가능 ");
			return;
		}
		schild[count] = new ScoreChild();
		System.out.println("이름 입력 >> ");
		schild[count].setName(sc.next());
		
		System.out.println("국어 입력 >> ");
		schild[count].setKor(sc.nextInt());
		
		System.out.println("수학 입력 >> ");
		schild[count].setMath(sc.nextInt());
		
		System.out.println("영어 입력 >> ");
		schild[count].setEng(sc.nextInt());
		
		System.out.println("음악 입력 >> ");
		schild[count].setMusic(sc.nextInt());
		
		System.out.println("체육 입력 >> ");
		schild[count].setPe(sc.nextInt());
		
		schild[count].setTotal();
		schild[count].setAvg();
		
		System.out.println("입력이 완료되었습니다 ");
		count ++;
		
		
	}
	public void output(ScoreChild[] schild) {
		if(count == 0) {
			System.out.println("출력할 내용이 없습니다");
			return;
		}
		for(int i=0; i<count; i++) {
//			System.out.println("이름 >> "+schild[i].getName());
//			int total = schild[i].getTotal();
//			System.out.println("총점 >> "+total);
//			System.out.println("평균 >> "+schild[i].getAvg());
//			
//			System.out.println();
			System.out.println(schild[i].toString());
		}
		
	}

}

ScoreService 에는 main 에서 동작할 친구들이 다 정의되어있다. 크게 어려운 부분은 없음 

반응형
Comments