본문 바로가기

빅데이터과정/JAVA

#55_140829_JAVA_상속

728x90

# 상속




 

상속이란?

기존의 클래스를 재 사용하여 새로운 클래스를 작성하는 것이다

상속을 통해서 클래스를 작성하면보다 적은 양의 코드로 새로운 클래스를 작성할 수 있다

코드를 공통적으로 관리하기 때문에 코드의 추가 및 변경이 용이하다

이러한 특징은 코드의 재사용을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다

자바에서 상속을 구현하는 방법은 클래스 이름귀에 상속받고자 하는 클래스 이름ㅇ르 extends와 함께 써준다

 

 

 

상속

class Tv {

    boolean power;       // 전원상태(on/off)

    int channel;             // 채널

 

    void power() {       power = !power; }

    void channelUp() {       ++channel; }

    void channelDown() {       --channel;       }

}

 

class CaptionTv extends Tv {

    boolean caption;             // 캡션상태(on/off)

 

    void displayCaption(String text) {

          if (caption) {       // 캡션 상태가 on(true) 때만 text 보여 준다.

                System.out.println(text);

          }

    }

}

 

class CaptionTvTest {

    public static void main(String args[]) {

 

          CaptionTv  ctv =  new  CaptionTv();

 

          ctv.channel = 10;         // 조상클래스로부터 상속받은 멤버

          ctv.channelUp();           // 조상클래스로부터 상속받은 메소드

 

          System.out.println(ctv.channel);

          ctv.displayCaption("Hello, World");      

          //caption true 상태가 아니기 때문에 출력되지 않는다

         

          ctv.caption = true;                         // 캡션기능을 켠다.

          ctv.displayCaption("Hello, World");       // 캡션을 화면에 보여 준다.

 

    }

 

결과값

11

Hello, World

 

 

 

상속(채널과 캡션 입력)

package bigdata;

 

import java.util.Scanner;

 

class Tv {

        boolean power; // 전원상태(on/off)

        int channel; // 채널

 

        void power() {

               power = !power;

        }

 

        void channelUp() {

               ++channel;

        }

 

        void channelDown() {

               --channel;

        }

}

 

class CaptionTv extends Tv {

        boolean caption; // 캡션상태(on/off)

 

        void displayCaption(String text) {

               if (caption) { // 캡션 상태가 on(true) 때만 text 보여 준다.

                       System.out.println(text);

               }

        }

}

 

class examples {

        public static void main(String args[]) {

               Scanner sc = new Scanner(System.in);

               CaptionTv ctv = new CaptionTv();

               ctv.channel = 10;

               System.out.println("현재 채널은 10번입니다채널을 올릴까요?");

               String input = sc.nextLine();

               if (input.equals("yes")) {

                       ctv.channelUp();

               }

               System.out.println("캡션을 킬까요?");

               input = sc.nextLine();

               if (input.equals("no")) {

                       ctv.caption = false;

               }

               System.out.println(ctv.channel);

               ctv.displayCaption("Hello, World");

        }

}

결과값

11

Hello, World

 

 

 

 

상속의 is-a 관계와 has-a의 관계

 




상속의 is-a 관계

학생은 사람이니까 사람이 가지고 있는 기능을 가져야 한다

(관계 학생 is a 사람)

교수도 사람이니깐 사람이 가지고 있는 기능을 가져야 한다

(관계 교수 is a 사람)

상속 관계가 되려면 최소한의 기본관계(is-a 관계)는 성립 되야 한다

 

 

 


 

 

 

오버라이딩


 

 

학생과 교수는 사람을 상속 받았기 떄문에 사람의 메소드를 다 실행할 수 있는데 study라는 메소드를 실행할 때는 다른 메시지(기능)가 출력되게 하려면 오버라이딩을 해야한다

 

 

 

오버라이딩

class people {

        public void breath() {

               System.out.println("숨을 쉽니다 ");

        }

 

        public void eat() {

               System.out.println("밥을 먹습니다. ");

        }

 

        public void sleep() {

               System.out.println("잠을 잡니다. ");

        }

 

        public void study() {

               System.out.println("공부를 합니다.");

        }

 

}

 

class student extends people {

        public void study() {

               System.out.println("자바를 공부합니다. ");

        }

        // 오버라이딩

}

 

class profession extends people {

        public void study() {

               System.out.println("연구를 합니다.");

        }

        // 오버라이딩

}

 

class overrideexample {

 

        public static void main(String[] args) {

               people p1 = new people();

               student s1 = new student();

               profession pro1 = new profession();

 

               pro1.study();

 

               s1.study();

 

        }

}

결과값

연구를 합니다.

자바를 공부합니다.

 

 

 

 

오버라이딩

class people {

        public void breath() {

               System.out.println("숨을 쉽니다 ");

        }

 

        public void eat() {

               System.out.println("밥을 먹습니다. ");

        }

 

        public void sleep() {

               System.out.println("잠을 잡니다. ");

        }

 

        public void study() {

               System.out.println("공부를 합니다.");

        }

 

}

 

class student extends people {

        public void study() {

               System.out.println("자바를 공부합니다. ");

        }

        // 오버라이딩

}

 

class profession extends people {

        public void study() {

               System.out.println("연구를 합니다.");

        }

        // 오버라이딩

}

 

class overrideexample {

 

        public static void main(String[] args) {

               people p1 = new people();

               student s1 = new student();

               profession pro1 = new profession();

 

               pro1.study();

 

               s1.study();

 

        }

}

결과값

연구를 합니다.

자바를 공부합니다.

 

 

 

 

오버라이딩2

class police {

        public void arrest() {

               System.out.println("체포를 합니다 ");

        }

 

        public void arrest2() {

               System.out.println("수갑을 채웁니다 ");

        }

 

        public void gun() {

               System.out.println("총을 쏩니다");

        }

 

 

}

 

class traPolice extends police {

        public void gun() {

               System.out.println("스피드건을 쏩니다. ");

        }

        // 오버라이딩

}

 

class StrongPolice extends police {

        public void gun() {

               System.out.println("기관총을 쏩니다.");

        }

        // 오버라이딩

}

 

class overrideexample {

 

        public static void main(String[] args) {

               police p1 = new police();

               traPolice p2 = new traPolice();

               StrongPolice sp1 = new StrongPolice();

 

               p1.gun();

               p2.gun();

               sp1.arrest();

               //gun외의 모든 조건을 상속받았기 때문에 police 메소드를 수행할  있다

              

 

        }

}

결과값

총을 쏩니다

스피드건을 쏩니다.

체포를 합니다

 

 




'빅데이터과정 > JAVA' 카테고리의 다른 글

#55_140902_JAVA_자바 개념정리  (0) 2014.09.02
#55_140902_JAVA_행번호 보이게 하기  (0) 2014.09.02
#55_140829_JAVA_FOR EACH  (0) 2014.08.29
#55_140829_JAVA_배열  (0) 2014.08.29
#55_140829_JAVA_SCANNER CLASS  (0) 2014.08.29