정구리의 우주정복
[Java] 상속 , override 정복하기 본문
반응형
- 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 에서 동작할 친구들이 다 정의되어있다. 크게 어려운 부분은 없음
반응형
'STUDY > K-DIGITAL' 카테고리의 다른 글
[Java] abstract ,down-casting 활용해보기 (0) | 2022.09.10 |
---|---|
[Java] 상속이랑 등등 (2) | 2022.09.06 |
[Javascript] mouse hover 시 글씨 나오게 하기 !! (0) | 2022.09.04 |
[Javascript] to-do list 만들기 (0) | 2022.09.04 |
[Javascript] 버튼 클릭 시 글자 색 변하게 하기 (0) | 2022.09.04 |
Comments