Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

상속, 오버라이딩 본문

JAVA/Basic

상속, 오버라이딩

붓그린 2017. 6. 16. 17:21
[ 상속 ]
- 기존의 클래스(부모 클래스)를 재상용하여 새로운 클래스(자식 클래스)를 작성하는 것
- 자식클래스는 부모클래스로부터 멤버변수, 메서를 물려받음
- 기존의 클래스=부모클래스=수퍼클래스
- 새로운 클래스=자식클래스=서브클래스


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