기존코드를 재활용한 코드 예제이다.
//menu class
public class Menu {
static void Menu() {
System.out.println("데이터입력");
System.out.println("데이터검색");
System.out.println("데이터삭제");
System.out.println("데이터 전체 출력");
System.out.println("프로그램 종료");
}
}
//PhoneBook class
public class PhoneBook {
public static void main(String[] args) {
PhoneBookManager pbm = new PhoneBookManager();
Scanner sc = new Scanner(System.in);
while (true) {
Menu.Menu();
int x = sc.nextInt();
if (x == 1) {
System.out.println("1.일반,2.대학,3.회사");
int y = sc.nextInt();
if ( y == 1) {
pbm.read();
}
else if(y == 2 ) {
pbm.readStudent();
}
else if (y == 3) {
pbm.readCompany();
}
} else if (x == 2) {
pbm.search();
} else if (x == 3) {
pbm.deleteData();
} else if (x == 4) {
pbm.Data();
}
else if (x == 5) {
System.out.println("프로그램을 종료 합니다");
break;
}
}
}
}
//PhoneBookManager class
public class PhoneBookManager {
final int MAX = 100;
PhoneInfo[] info = new PhoneInfo[MAX];
int cnt = 0;
Scanner sc = new Scanner(System.in);
void read() {
System.out.println("이름");
String name = sc.next();
System.out.println("전화번호");
String number = sc.next();
System.out.println("생년월일");
String birth = sc.next();
info[cnt] = new PhoneInfo(name, number, birth);
cnt++;
}
void readStudent() {
System.out.println("이름");
String name = sc.next();
System.out.println("전화번호");
String number = sc.next();
System.out.println("전공");
String major = sc.next();
System.out.println("학년");
int year = sc.nextInt();
info[cnt] = new PhoneUnivInfo(name, number, major, year);
cnt++;
}
void readCompany() {
System.out.println("이름");
String name = sc.next();
System.out.println("전화번호");
String number = sc.next();
System.out.println("전공");
String company = sc.next();
info[cnt] = new PhoneCompanyInfo(name, number, company);
cnt++;
}
void search() {
System.out.println("이름을 입력하세요");
String name = sc.next();
for (int i = 0; i < cnt; i++) {
if(info[i].name.equals(name)) {
info[i].showPhoneInfo();
}
}
}
void deleteData() {
System.out.println("이름을 입력하세요");
String name = sc.next();
for (int i = 0; i < cnt; i++) {
if(info[i].name.equals(name)) {
info[i] = null;
cnt--;
info[i] = info[i+1];
}
}
for (int i = 0; i < cnt; i++) {
System.out.println(info[i].name);
}
}
void Data() {
for (int i = 0; i < cnt; i++) {
info[i].showPhoneInfo();
System.out.println("---------------");
}
}
}
//Phone Info class
public class PhoneInfo {
String name;
String number;
String birth;
public PhoneInfo(String name, String number, String birth) {
this.name = name;
this.number = number;
this.birth = birth;
}
public PhoneInfo(String name2, String phoneNum) {
this.name = name2;
this.number = phoneNum;
}
public void showPhoneInfo() {
System.out.println("name : " + this.name);
System.out.println("number : " + this.number);
System.out.println("birth : " + this.birth);
}
}
class PhoneUnivInfo extends PhoneInfo { // PhoneInfo 클래스를 상속받는다.
String name;
String PhoneNum;
String major;
int year;
public PhoneUnivInfo(String name, String PhoneNum, String major, int year) {
super(name, PhoneNum); //super란 부모클래스의 생성자를 불러주는것이다
this.name = name;
this.PhoneNum = PhoneNum;
this.major = major;
this.year = year;
}
@Override
public void showPhoneInfo() {
// TODO Auto-generated method stub
super.showPhoneInfo();
System.out.println("전공 : " + this.major);
System.out.println("학년 : " + this.year); //
}
}
class PhoneCompanyInfo extends PhoneInfo {
String name;
String PhoneNum;
String company;
public PhoneCompanyInfo(String name, String PhoneNum, String company) {
super(name, PhoneNum);
this.company = company;
}
@Override
public void showPhoneInfo() {
// TODO Auto-generated method stub
super.showPhoneInfo();
System.out.println("회사 : " + this.company);
}
}
자식 클래스를 생성할때 부모클래스의 생성자도 무조건 불러와야한다. 부모 생성자는 자식의 생성자의 맨 첫 줄에서 호출된다.
public class PhoneInfo {
String name;
String number;
String birth;
public PhoneInfo(String name, String number, String birth) {
this.name = name;
this.number = number;
this.birth = birth;
}
public PhoneInfo(String name2, String phoneNum) {
this.name = name2;
this.number = phoneNum;
}
}
class PhoneUnivInfo extends PhoneInfo { // PhoneInfo 클래스를 상속받는다.
String name;
String PhoneNum;
String major;
int year;
public PhoneUnivInfo(String name, String PhoneNum, String major, int year) {
super(name, PhoneNum); //super란 부모클래스의 생성자를 불러주는것이다
this.major = major;
this.year = year;
}
}
PhoneUnivInfo 4개의 매개변수를 가진 생성자가 호출이 되면 super메소드로 부모클래스의 name,PhoneNum이 해당하는 생성자를 실행한다
부모클래스에서 상속받은 메소드를 재정의하는것이다. 오버라이딩 된 메소드는 부모의 동일메소드 보다 우선한다.
@Override
public void showPhoneInfo() {
// TODO Auto-generated method stub
super.showPhoneInfo(); // 기존의 부모클래스에 메소드를 가져오고
System.out.println("전공 : " + this.major); // 새로운 메소드를 추가한다.
System.out.println("학년 : " + this.year);
}
@Override
public void showPhoneInfo() {
// TODO Auto-generated method stub
super.showPhoneInfo();
System.out.println("회사 : " + this.company);
}
기존 부모클래스에 메소드를 가져오고 새로운 메소드를 추가한다
참고사이트
https://chanhuiseok.github.io/posts/java-1/
https://scshim.tistory.com/210
https://sundrystore.tistory.com/16