ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바개념3 (상속)
    학교 수업/자바프로그래밍 2020. 4. 16. 21:35

    자바의 상속

    - 자바는 하나의 클래스만을 상속받는 단일 상속만 가능

       (다중 상속일 경우, 메소드 출처의 모호성 문제 때문에)

    - 상속을 통해 기존해 작성된 클래스 재활용 가능하고,

      클래스 간 계층적 관계를 구성함으로써 다형성 문법적 토대 마련


    코드 예시


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    class Parent {
        private int a = 10// private 필드
        public int b = 20;  // public 필드
    }
     
    class Child extends Parent {
        public int c = 30;  // public 필드
        void display() {
           // System.out.println(a); // 상속받은 private 필드 참조, 오류 발생
           System.out.println(b);    // 상속받은 public 필드 참조
           System.out.println(c);    // 자식 클래스에서 선언한 public 필드 참조
        }
    }
     
    public class Inheritance01 {
        public static void main(String[] args) {
            Child ch = new Child();
            ch.display();
        }
    }
    cs


    클래스를 통한 다중 상속은 지원하지 않지만,

    인터페이스 라는 것을 이용해 다중 상속은 할 수 있다.


    인터페이스(interface) ?

    - 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매니저 역할 까지 담당하는 일종의 추상 클래스


    주의점

    자바의 추상클래스는 생성자, 필드, 일반메소드, 추상메소드를 포함할수 있지만

    인터페이스는 추상메소드와 상수만 포함 가능하다.


    - 선언 문법


    접근제어자 interface 인터페이스이름 {

        public static final 타입 상수이름 = ;

        ...

        public abstract 메소드이름(매개변수목록);

        ...

    }


     인터페이스의 모든 필드는 상수만 가능하니깐 public static final이어야 하며

     모든 메소드는 추상 메소드만 가능하니깐 public abstract이어야 한다.


     접근제어자는 생략이 가능하며, 생략 시 컴파일 할때 자바 컴파일러가 자동으로 default로 정해서 추가해줌.


    - 클래스가 인터페이스 상속받는 문법


    class 클래스이름 implements 인터페이스이름 { ... }


    class 클래스이름 extend 상위클래스이름 implements 인터페이스이름 { ... } //상속과 동시도 가능



    - 코드 예시

     

    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
    32
    33
    interface Animal { public abstract void cry(); }
    interface Pet { public abstract void play(); }
     
    class Cat implements Animal, Pet {
        public void cry() {
            System.out.println("냐옹냐옹!");
        }
        public void play() {
            System.out.println("쥐 잡기 놀이하자~!");
        }
    }
     
    class Dog implements Animal, Pet {
        public void cry() {
            System.out.println("멍멍!");
        }
        public void play() {
            System.out.println("산책가자~!");
        }
    }
     
    public class Polymorphism04 {
        public static void main(String[] args) {
            Cat c = new Cat();
            Dog d = new Dog();
     
            c.cry();
            c.play();
            d.cry();
            d.play();
        }
    }
     
    cs


    댓글

Designed by Tistory.