붓, 그리다
상속, 오버라이딩 본문
[ 상속 ]
- 기존의 클래스(부모 클래스)를 재상용하여 새로운 클래스(자식 클래스)를 작성하는 것
- 자식클래스는 부모클래스로부터 멤버변수, 메서를 물려받음
- 기존의 클래스=부모클래스=수퍼클래스
- 새로운 클래스=자식클래스=서브클래스
1) 상속의 장점 및 특징
- 기본의 부모클래스의 멤버변수, 메서드를 그대로 사용 가능 (재사용성)
- 코딩양이 줄어들고 개발 시간이 단축
- 생성자와 초기화 블록은 상속되지 않는다.
- 멤버변수와 메소드만 상속된다. 단, private로 선언된 멤버변수과 메소드는 상속 불가(캡슐화된)
- 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다. (상속 누적)
-> 멤버변수와 메소드가 많아지기에 기능이 많아진다.
- 다중상속 불가(동시에 한개이상의 부모로부터 상속금지)
2) 형식
class child extends Parent{}
package j0607;
// 신입사원이 배치된 부서의 팀장에 대한 정보 클래스
// 기존의 클래스(Employee)와 멤버변수와 메서드가 동일
class Manager extends Employee{
/*String name; //이름
int age; //나이
String sex; //성별
String addr; //주소
long salary; //급여 - 보너스 : 직원(150%), 중간관리자(300%)
*/
String department; //부서명
// 객체배열 : 기본배열, 객체(Employee)만 따로 저장하는 배열
Employee sub[]; //신입사원들을 배열로 멤버변수 선언
//생성자는 상속이 안됨
public Manager() {}
public Manager(String name, int age, String sex, String addr, long salary, String department) {
this.name = name;
this.age = age;
this.sex = sex;
this.addr = addr;
this.salary = salary;
this.department = department;
}
}
// 신입사원 정보 저장 -> 부서 배치, 팀장의 정보 출력
public class Company {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1. 신입사원 3명
Employee e1=new Employee("홍길동",23,"남","서울시 강북구",1500);
Employee e2=new Employee("김길수",33,"남","대전시 중구",1700);
Employee e3=new Employee("임시",30,"여","부산시 동구",1800);
// 2. 적합도 검사 > 영업부에 배치
Manager m1=new Manager("테스트",42,"남","서울시 강남구",2500,"영업부");
// 3. 부서배치 : 객체배열 > 형식) 자료형 배열명=new 자료형[갯수]
m1.sub=new Employee[3]; // 0,1,2
m1.sub[0]=e1; // 홍길동의 정보를 저장
m1.sub[1]=e2; //김길수 정보
m1.sub[2]=e3; // 임시 정보
// 4. 부하직원의 정보와 팀장의 정보 출력
for(int i=0;i<m1.sub.length;i++) {
/*System.out.println("직원이름 : " + m1.sub[i].name); // e1.name
System.out.println("직원나이 : " + m1.sub[i].age); // e1.age
display 메서드가 있기에 일일히 출력할 필요 없음*/
m1.sub[i].display();
System.out.println("============");
}
// 팀장의 정보
m1.display(); // display 부모로부터 물려받은 메서드
System.out.println("부서명 : "+m1.department);
}
3) 상속의 단점
- 부모로부터 물려받은 메서드를 자식입장에서 그대로 사용하면 문제 발생
-> 부모로 물려받은 메서드 중 자식클래스 입장에서 내용이 맞지 않을 경우, 자식 클래스의 내용에 맞게 내용을 수정하는 기법
-> 오버라이딩(파일 덮어쓰기)
-> 부모의 물려받은 메서드를 자식 클래스 내부에 내용을 변경하여 다시 한번 써준다.
4) 오버라이딩
class Manager extends Employee{
/*String name; //이름
int age; //나이
String sex; //성별
String addr; //주소
long salary; //급여 - 보너스 : 직원(150%), 중간관리자(300%)
*/
String department; //부서명
// 객체배열 : 기본배열, 객체(Employee)만 따로 저장하는 배열
Employee sub[]; //신입사원들을 배열로 멤버변수 선언
//생성자는 상속이 안됨
public Manager() {}
public Manager(String name, int age, String sex, String addr, long salary, String department) {
this.name = name;
this.age = age;
this.sex = sex;
this.addr = addr;
this.salary = salary;
this.department = department;
}
//보너스 메서드 (오버라이딩)
double bonus() {
return salary*3.0;
}
}
'JAVA > Basic' 카테고리의 다른 글
컬렉션 ★★ (0) | 2017.06.19 |
---|---|
쓰레드 2 (동기화, Singleton) (0) | 2017.06.19 |
쓰레드 (0) | 2017.06.16 |
입출력(직렬화) (0) | 2017.06.16 |
입출력(스트림) 2 (0) | 2017.06.16 |
Comments