패키지
메소드 오버라이딩(Overriding) 본문
메소드 오버라이딩(Overriding) 탄다..
1. 상위 클래스의 멤버와 같은 이름을 가진 멤버를 하위 클래스에 재구성해서 사용할 수 있다. 오버라이딩(Overriding).
2. 오버라이딩 기본 조건
- 상위 클래스의 멤버와 동일한 이름, 메소드 시그니처, 리턴타입을 가진 메소드
- 접근지정자는 상위 클래스와 다르게 지정할 수 있다. 단, 상위 클래스보다 좁은 범위로의 지정은 안된다.
- 더 적은 예외를 지정할 수 없다.
- static, instance 상태를 변경할 수 없다.
3. 메소드 오버라이딩은 상위 클래스의 멤버를 하위 클래스가 사용할 때 기존의 메소드가 가진 구현 내용을 다르게 구현하고자 할 때 사용한다. 단, 상위 클래스의 생성자를 하위 클래스가 오버라이딩 할 수 없다.
4. 상위 클래스의 멤버 모두를 오버라이딩 할 수 있는 것은 아니다.
- private 멤버
- final 키워드 지정한 멤버
- final 클래스인 경우
=====================================================================================================
문제) 여러명의 학생(Student 자료형-name, tel)이 저장된 배열에서
특정 학생 정보 검색(name 기준으로 검색)하는 과정
//Student.java -> 학생 정보 자료형 클래스. name, tel
//MenuAction.java -> 검색 메소드 구현. 학생 정보 저장된 배열 준비.
//Main.java -> 검색 메뉴
//Student.java
package com.sist;
public class Student {
private String name, tel;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
//toString() 메소드 오버라이딩 구현
//멤버변수의 데이터를 출력하는 용도로 변경
@Override
public String toString() {
return String.format("%s %s"
, this.getName()
, this.getTel());
}
//문제) equals() 메소드 오버라이딩
//equals()는 Object 클래스의 메소드
//equals()는 원래 객체의 참조주소를 비교하는 기능이지만
//객체의 멤버(name)을 비교하도록 변경
@Override
public boolean equals(Object obj) {
//원본 -> this.name
//비교 대상 -> obj.getName(); //X
//비교 대상 -> ((Student)obj).getName(); //O
//비교 방법 -> 같은지, 다른지 ? -> true or false -> 비교 대상의 자료형 -> String -> equals() 메소드 -> 문자열 비교
return this.name.equals(((Student)obj).getName());
}
}
//MenuAction.java
package com.sist;
import java.util.Scanner;
public class MenuAction {
//학생 정보 저장용 배열 준비->데이터 저장소
private Student[] students;
public MenuAction() {
//배열 생성 및 초기화
students = new Student[5];
this.init();
}
private void init() {
Student student0 = new Student();
student0.setName("hong");
student0.setTel("010-123-1234");
students[0] = student0;
Student student1 = new Student();
student1.setName("kim");
student1.setTel("010-432-4321");
students[1] = student1;
Student student2 = new Student();
student2.setName("park");
student2.setTel("010-987-9876");
students[2] = student2;
Student student3 = new Student();
student3.setName("choi");
student3.setTel("010-567-5678");
students[3] = student3;
Student student4 = new Student();
student4.setName("hwang");
student4.setTel("010-876-8765");
students[4] = student4;
}
public void menuSearch(Scanner sc) {
//외부 입력(name)
System.out.print("name?");
String name = sc.next();
Student value = new Student();
value.setName(name);
//처리 -> 검색 액션
//-> 배열 저장소 내에서 name이 일치하는 자료 검색
//-> Student 자료형을 가진 객체 한 개
Student result = null;
for (int i=0; i<students.length; ++i) {
Student temp = students[i];
/*
if (temp.getName().equals(name)) {
result = temp;
break;
}
*/
if (value.equals(temp)) {
result = temp;
break;
}
}
//결과 출력
if (result == null) {
System.out.printf("검색 결과가 없습니다.%n%n");
} else {
/*
System.out.printf("%s %s %n%n"
, result.getName()
, result.getTel());
*/
/*
System.out.println(result); //객체 정보
System.out.println(result.toString()); //객체 정보
*/
//toString() 메소드 호출시 객체 정보가 아니라
//멤버변수의 데이터를 출력하는 용도로 변경
//->오버라이딩
System.out.println(result);
System.out.println();
}
}
}
//Main.java
package com.sist;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MenuAction menu = new MenuAction();
do {
System.out.println("--- 회원 정보 관리 ---");
System.out.println("1. 회원 검색");
System.out.print("선택(1, 0-exit)?");
int m = sc.nextInt();
if (m==0) {
break;
}
switch (m) {
case 1: menu.menuSearch(sc); break;
}
}while(true);
sc.close();
}
}
'Server-Side > Java' 카테고리의 다른 글
객체 지향 프로그래밍_기초개념 (3) | 2015.08.04 |
---|---|
메소드 오버로딩(Overloading) (0) | 2015.08.03 |
생성자(Constructor) (0) | 2015.08.01 |
이클립스 한글깨짐 현상 (0) | 2015.07.29 |
eclipse 설치 (0) | 2015.07.13 |