EEL2 LAB Week 4: Inheritance 1. 다음을만족하는클래스 Employee를작성하시오.(1에서 4번까지관련된문제입니다.) 클래스 Employee 직원는클래스 Regular 정규직와 Temporary 비정규직의상위클래스 필드 : 이름, 나이, 주소, 부서, 월급정보를필드로선언 생성자 : 이름, 나이, 주소, 부서를지정하는생성자정의 메소드 printinfo(): 인자는없고자신의필드이름, 나이, 주소, 부서를출력 2. 다음을만족하는클래스 Regular를작성하시오. 클래스 Regular 는위에서구현된클래스 Employee 의하위클래스 생성자 : 이름, 나이, 주소, 부서를지정하는상위생성자호출 Setter: 월급정보필드를지정 메소드 printinfo(): 인자는없고 정규직 이라는정보와월급을출력 3. 다음을만족하는클래스 Temporary를작성하시오. 클래스 Temporary 는위클래스 Employee 의하위클래스 필드 : 일한시간, 시간당보수를선언하고시간당보수의초기값으로 10000 저장생성자 : 이름, 나이, 주소, 부서를지정하는상위생성자호출 Setter: 일한시간을지정하면서급여를일한시간 * 시간당보수로계산하여저장메소드 printinfo(): 인자는없고 비정규직 이라는정보와일한시간과급여를출력또한다음프로그램으로클래스 Employee, Regular, Temporary 를점검하는프로그램실행 Regular r = new Regular(" 이순신 ", 35, " 서울 ", " 인사부 "); Temporary t = new Temporary(" 장보고 ", 25, " 인천 ", " 경리부 "); r.setsalary(5000000); r.printinfo() ; t.setworkhours(120); t.printinfo() ; 4. 다음프로그램과같이 Regular 객체와 Temporary 객체를 Employee 변수에저장하여실행시킬수있도록프로그램을수정하시오. Employee r = new Regular(" 이순신 ", 35, " 서울 ", " 인사부 "); Employee t = new Temporary(" 장보고 ", 25, " 인천 ", " 경리부 "); //Regular r = new Regular(" 이순신 ", 35, " 서울 ", " 인사부 "); //Temporary t = new Temporary(" 장보고 ", 25, " 인천 ", " 경리부 "); r.setsalary(5000000); r.printinfo() ; t.setworkhours(120); t.printinfo() ;
Hint: Use inheritance, method overriding < 출력예 > 이직원은정규직직원입니다. 이직원의월급여는 0원입니다. 이름 : 장보고, 나이 : 25 주소 : 인천, 부서 : 경리부이직원은임시직직원입니다. 이직원의시간당급여는 10000원입니다. 이달에는 120시간을일을해월급이 1200000입니다. 5. 과일, 사과, 배, 포도를표현한클래스를만들고이들간의관계를고려하여하나의클래스를추상클래스로만들어메소드 print() 를구현하고다음과같은소스와결과가나오도록클래스를작성하시오. 소스 결과 Frute fary[] = new Grape(), new Apple(), new Pear(); for (Frute f: fary) f.print(); 나는포도이다. 나는사과이다. 나는배이다. Hints: Begin with abstract class Frute like public abstract class Frute public abstract void print(); public class Grape extends Frute public class Pear extends Frute public class Apple extends Frute public void print() 6. 다음조건을만족하도록클래스 Car를작성하시오. 필드는정수형으로 maxspeed 최대속도와 speed 현재속도로선언 생성자 : 최대속도를지정하는생성자구현
메소드 : speedup(), speedup(int) 과 speeddown(), speeddown(int) 으로메소드오버로딩구현 다음은클래스 Car 객체로 SpeedUp() 과 speeddown() 을점검하는소스 Car mycar = new Car(300); mycar.speedup(); mycar.speedup(); mycar.speedup( 50); mycar.speedup(50); mycar.speeddown( 30); mycar.speeddown(30); mycar.speeddown(30); mycar.speeddown(30); mycar.speedup(100); mycar.speedup(300); 다음은위소스의실행결과 : 각줄이하나의메소드호출의결과가되도록 speedup() 호출 : 최대속도 : 300, 현재속도 : 5 speedup() 호출 : 최대속도 : 300, 현재속도 : 10 speedup( 50) 호출 : 오류 : 속도가음수라 0으로지정 : 최대속도 : 300, 현재속도 : 10 speedup(50) 호출 : 최대속도 : 300, 현재속도 : 60 speeddown( 30) 호출 : 오류 : 속도가음수라 0으로지정 : 최대속도 : 300, 현재속도 : 60 speeddown(30) 호출 : 최대속도 : 300, 현재속도 : 30 speeddown(30) 호출 : 최대속도 : 300, 현재속도 : 0 speeddown(30) 호출 : 속도가 0보다작아져 0으로지정, 최대속도 : 300, 현재속도 : 0 speedup(100) 호출 : 최대속도 : 300, 현재속도 : 100 speedup(300) 호출 : 최대속도보다높아최대속도로지정, 최대속도 : 300, 현재속도 : 300 Hints: Method overloading and begin with the following: public class Car private int maxspeed; public int speed; public Car(int maxspeed) this.maxspeed = maxspeed; // 메소드오버로딩 public int speedup() public int speedup(int speed) public void checkmaxspeed()
7. 다음조건을만족하도록클래스 Person과 Student를작성하시오. 클래스 Person: 필드 : 이름, 나이, 주소선언 클래스 Student: 필드 : 학교명, 학과, 학번, 8 개학기평균평점을저장할배열로선언 생성자 : 학교명, 학과, 학번지정 메소드 average(): 8 개학기평균평점의평균을반환 클래스 Person 과 Student 프로그램테스트프로그램의결과 : 8 개학기의평균평점은 표준입력으로받도록 이름 : 홍길동나이 : 25 주소 : 서울시광진구학교 : 건국대학교학과 : 전자공학부학번 : 20132222 8학기학점을순서대로입력하세요 1학기학점 3.37 2학기학점 3.89 3학기학점 4.35 4학기학점 3.76 5학기학점 3.89 6학기학점 3.89 7학기학점 4.26 8학기학점 4.89 8학기총평균평점은 4.0375점입니다 < 골격프로그램 > public class Person String name; // 개인의이름 int age; // 개인의나이 String address; // 개인의주소 import java.util.scanner; public class Student extends Person // 생성자 1 개정의 (10)
//3 개의 getter 정의 (9) //8 학기평균평균을구하는메소드 (10) public static void main(string args[]) Scanner s = new Scanner(System.in); Student me = new Student(" 건국대학교 ", " 전자공학부 ", 20132222); me.name = " 홍길동 "; me.age = 20; me.address = " 서울시광진구 "; System.out.println(" 이름 : " + me.name); System.out.println(" 나이 : " + me.age); System.out.println(" 주소 : " + me.address); System.out.println(" 학교 : " + me.getschool()); System.out.println(" 학과 : " + me.getmajor()); System.out.println(" 학번 : " + me.getnum()); System.out.println(" "); System.out.println("8 학기학점을순서대로입력하세요 "); for (int i = 0; i < 8; i++) System.out.print((i + 1) + " 학기학점 "); me.jum[i] = s.nextdouble() ; System.out.println(" "); System.out.println("8 학기총평균평점은 " + me.average() + " 점입니다 "); 8. 수학의복소수를추상화한클래스 Complex를작성하시오. 필드 : 복소수의실수부와허수부를위한변수선언 생성자 : 실수부와허수부를인자로하는생성자 정적메소드 add(complex c1, Complex c2): 복소수 c1 과 c2 의더한결과인복소수를반환 복소수 a + bi 와 c + di 의합 : (a+c) + (c+d)i 정적메소드 sub(complex c1, Complex c2): 복소수 c1 과 c2 의뺀결과인복소수를반환 복소수 a + bi 와 c + di 의빼기 : (a-c) + (c-d)i 메소드 abs(): 복소수의절대값반환 복소수 a + bi 의절대값연산식 : Math.sqrt(a 2 + b 2 ) 메소드 print(): a + bi 형태로출력 복소수 x = 3.4 + 4.5i, y = 5.2 + -2.4i 를생성하여더한결과, 뺀결과, x 와 y 의절대값을 출력하는프로그램도작성
< 출력예 > 3.40 + 4.50i 5.20 + -2.40i 8.60 + 2.10i -1.80 + 6.90i 5.640035460881429 5.727128425310542 < 골격프로그램 > public class Complex double a, b; public Complex(double a, double b) public static Complex add(complex c1, Complex c2) public static Complex sub(complex c1, Complex c2) public double abs() public void print() System.out.printf("%.2f + %.2fi %n", a, b); public static void main(string[] args) System.out.println(x.abs()); System.out.println(y.abs()); (9~11 번 ) public class DataSet private double sum; private Measurable maximum; private int count;... public void add(measurable x) sum = sum + x.getmeasure(); if (count == 0 maximum.getmeasure() < x.getmeasure()) maximum = x; count++; public Measurable getmaximum() return maximum;
/** Describes any class whose objects can be measured. public interface Measurable /** Computes the measure of the object. @return the measure double getmeasure(); 9. 아래의 Die 클래스가 Measurable 인터페이스를구현하도록하고위의 DataSet 클래스를수정하여주사위를 10번던지고나오는주사위값과함께평균값을출력하는클래스 DieTest를작성하고실행. ( 주어진클래스외불필요한클래스추가는안됨 ) import java.util.random; /** This class models a die that, when cast, lands on a random face. public class Die /** Constructs a die with a given number of sides. @param s the number of sides, e.g. 6 for a normal die public Die(int s) sides = s; generator = new Random(); /** Simulates a throw of the die @return the face of the die public int cast() return 1 + generator.nextint(sides); private Random generator; private int sides;
10. Measurable 인터페이스를구현하는클래스 Quiz를작성. 객체 quiz는점수 score와평점 grade ( 예를들어 A0, A+) 를갖는다. 위의 DataSet 클래스를사용하여다음과같이퀴즈성적처리가가능하도록프로그램을작성. // 클래스 quiz 를테스트하기위한프로그램 public class QuizTest public static void main(string[] args) DataSet quizdata = new DataSet(); Quiz q1 = new Quiz(89, "B+"); Quiz q2 = new Quiz(90, "A-"); Quiz q3 = new Quiz(75, "C"); quizdata.add(q1); quizdata.add(q2); quizdata.add(q3); System.out.println("The average score is " + quizdata.getaverage()); Measurable max = quizdata.getmaximum(); Quiz q = (Quiz) max; double score = q.getscore(); String grade = q.getgrade(); System.out.println("The highest quiz score is = " + score + " and the grade is " + grade); 11. 하나의객체 person은이름 name과키 height의속성을갖는다. 위의 DataSet 클래스를사용하여한그룹의 Person 객체를처리하는프로그램을작성. public class PersonTest public static void main(string[] args) class PersonMeasurer implements Measurer public double measure(object anobject) Person aperson = (Person) anobject; return aperson.getheight(); Measurer m = new PersonMeasurer(); DataSet data = new DataSet(m); data.add(new Person("Joe", 183)); data.add(new Person("Chrissy", 158)); data.add(new Person("Bobby", 175)); System.out.println("Average height = " + data.getaverage()); Person p = (Person) data.getmaximum(); String name = p.getname(); System.out.println("The tallest person is " + name);