① 부모 클래스 Person 먼저 생성하기
- 부모 클래스 필드값 생성
- 부모 클래스 기본 생성자 생성 후 매개변수 생성자로 필드값 초기화
- 매개변수에 대해 getter/setter 메소드 생성
- 문자열로 필드값을 전부 모아 출력값 반환
public class Person {
// 필드
protected String name; // 이름
private int age; // 나이
private double height; // 신장
private double weight; // 체중
// 생성자
public Person() {} // 기본 생성자
public Person(int age, double height, double weight) { // 매개변수 생성자
this.age = age;
this.height = height;
this.weight = weight;
}
// 메소드
public String getName() { // getter/setter 메소드
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
// 문자열로 모아 전부 출력
public String information() {
return "Name: "+name+", Age: "+age+", Height: "+height+", weight"+weight;
}
}
② 자식 클래스 Student와 Employee 생성하기
- 부모 클래스 상속받기(extends)
- 자식 클래스 필드값 생성
- 자식 클래스 기본 생성자 생성 후 매개변수 생성자 생성
→ name은 접근제한자가 protected이므로 참조변수 super.를 사용하여 부모 필드값에 직접 접근한다.
→ age, height, weight는 부모 클래스의 생성자(super();)를 통해 초기화한다. 이때, 'super();'는 가장 위에 적어야 한다.
- 자식 매개변수 getter/setter 메소드 생성
- 부모 메소드 information()에 대해 자식 필드값을 오버라이딩하여 출력값 반환
// 자식 클래스 Student
public class Student extends Person {
// 필드
private int grade; // 학년
private String major; // 전공
// 생성자
public Student() {} // 기본 생성자
public Student(String name, int age, double height, double weight,
int grade, String major) {
// super();는 가장 위에 적어야 한다.(부모 생성자를 통해 초기화)
super(age, height, weight);
// 접근제한자가 protected일 때 참조변수 super.를 사용하여 부모 필드값에 직접 접근한다.
super.name = name;
this.grade = grade;
this.major = major;
}
// 메소드
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@Override
public String information() {
return super.information()+", Grade: "+grade+", Major: "+major;
}
}
// 자식 클래스 Employee
public class Employee extends Person {
// 필드
private int salary; // 급여
private String dept; // 부서
//생성자
public Employee() {} // 기본 생성자
public Employee(String name, int age, double height, double weight,
int salary, String dept) {
super(age, height, weight);
super.name = name;
this.salary = salary;
this.dept = dept;
}
// 메소드
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
@Override
public String information() {
return super.information()+", Salary: "+salary+", Dept: "+dept;
}
}
③ 부모 클래스와 자식 클래스를 실행할 실행 클래스 Execute 생성하기
- 학생 클래스: 3명의 학생 정보를 기록할 객체 배열을 만든 후 객체를 생성하여 반복문으로 출력
- 직원 클래스: 최대 6명의 사원 정보를 기록할 수 있는 객체 배열을 만든 후 반복문으로 사원 정보를 입력받도록 구현
2명의 사원 정보를 입력받아 객체에 저장한 후 사원 정보 출력
입력받을 때 while문으로 무한으로 입력받기
입력값이 'Y'이면 객체를 추가하고, 'N'이면 더 입력받지 않기
public class Execute {
public static void main(String[] args) {
// 학생 클래스 객체 배열 생성
Student sArr = new Student[3]; // sArr이라는 배열 생성 후 크기 3 할당
sArr[0] = new Student("홍길동", 27, 170.1, 65.5, 4, "경제학과");
sArr[1] = new Student("허준", 23, 169.8, 64.3, 3, "한의학과");
sArr[2] = new Student("황진이", 21, 166, 58.4, 2, "공연예술학과");
for(int i = 0; i < sArr.length; i++) { // 반복문으로 출력
System.out.println(sArr[i].information());
}
Employee[] eArr = new Employee[6]; // eArr이라는 배열 생성 후 크기 6 할당
Scanner sc = new Scanner(System.in); // 스캐너로 입력받기
int count = 0; // 횟수 세기
while(true) { // while(true) : 무한 반복문
System.out.print("Name: \n");
String name = sc.next();
System.out.print("Age: \n");
int age = sc.nextInt();
System.out.print("Height: \n");
double height = sc.nextDouble();
System.out.print("Weight: \n");
double weight = sc.nextDouble();
System.out.print("Salary: \n");
int salary = sc.nextInt();
System.out.print("Dept: \n");
String dept = sc.next();
eArr[] = new Employee(name, age, height, weight, salary, dept);
count++; // 증감식(횟수 1회씩 추가)
// 한 사원 정보를 입력할 때마다 묻기
System.out.println("계속 입력하겠습니까? [Y/N]");
char ch = sc.next().charAt(); // .charAt()으로 한 글자만 받기
if(ch == 'Y' || ch == 'y') { // 대답이 'Y' or 'y'일 때엔 지나가기
continue;
}
// 대답이 'N' or 'n'일 때엔 프로그램을 종료한다고 출력한 후 중지
else if(ch == 'N' || ch == 'n') {
System.out.println("프로그램을 종료합니다.");
break;
}
}
System.out.println(count+"명 입력되었습니다."); // 입력한 사원 수 세기
for(int i = 0; i < count; i++) { // 입력한 수만큼의 사원 정보 출력하기
System.out.println(eArr[i].information());
}
}
}