ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 상속(Inheritance), 인터페이스(Interface)
    Java/용어 2019. 4. 30. 09:38
    반응형

    상속 : 재사용 + 확장

     - 객제 지향에서의 상속은 상위 클래스의 특성을 하위 클래스에서 상속(특성 상속)하고 거기에 더해 필요한 특성을 추가, 즉 확장해서 사용할 수 있다는 의미입니다.

     

    상속의 특징

     - 객제 지향의 상속은 상위 클래스의 특성을 재사용하는 것입니다. (상위 클래스에서만 getClassName() 메서드를 구현했지만 모든 하위 클래스의 객체에서 getClassName() 메서드를 사용할 수 있습니다.)

    - 객제 지향의 상속은 상위 클래스의 특성을 확장하는 것입니다.

    - 객제 지향의 상속은 is a kind of 관계를 만족해야 합니다. (하위 클래스 is a kind of 상위 클래스)

     

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    public class Animal {
     
        public String name;
     
        Animal() {
            name = "동물";
        };
     
        public void getClassName() {
            System.out.println(name + " 클래스입니다.");
        }
    }
     
    public class Mammals extends Animal {
     
        Mammals() {
            name = "포유류";
        }
    }
     
    public class Birds extends Animal {
     
        Birds() {
            name = "조류";
        }
    }
     
    public class Whale extends Mammals {
     
        Whale() {
            name = "고래";
        }
    }
     
    public class Bat extends Mammals {
     
        Bat() {
            name = "박쥐";
        }
    }
     
    public class Sparrow extends Birds {
     
        Sparrow() {
            name = "참새";
        }
    }
     
    public class Penguin extends Birds {
     
        Penguin() {
            name = "펭귄";
        }
    }
     
    public class Main {
     
        public static void main(String[] args) {
     
            Animal animal = new Animal();
            Mammals mammals = new Mammals();
            Birds birds = new Birds();
            Whale whale = new Whale();
            Bat bat = new Bat();
            Sparrow sparrow = new Sparrow();
            Penguin penguin = new Penguin();
     
            animal.getClassName();
            mammals.getClassName();
            birds.getClassName();
            whale.getClassName();
            bat.getClassName();
            sparrow.getClassName();
            penguin.getClassName();
        }
    }
    cs

     

    상속과 인터페이스

     - 인터페이스는 be able to, 즉 "무엇을 할 수 있는"이라는 표현 형태로 구현하는 것이 좋습니다. 

     - 인터페이스는 클래스가 "무엇을 할 수 있다"라고 하는 기능을 구현하도록 강제합니다.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    public interface Swimable {
     
        void swim();
    }
     
    public interface Flyable {
     
        void fly();
    }
     
    public class Whale extends Mammals implements Swimable {
     
        Whale() {
            name = "고래";
        }
     
        @Override
        public void swim() {
            System.out.println(name + " 클래스는 Swimable 인터페이스를 상속 받아 swim 메서드를 구현하였습니다.");
        }
    }
     
    public class Bat extends Mammals implements Flyable {
     
        Bat() {
            name = "박쥐";
        }
     
        @Override
        public void fly() {
            System.out.println(name + " 클래스는 Flyable 인터페이스를 상속 받아 fly 메서드를 구현하였습니다.");
        }
    }
     
    public class Sparrow extends Birds implements Flyable {
     
        Sparrow() {
            name = "참새";
        }
     
        @Override
        public void fly() {
            System.out.println(name + " 클래스는 Flyable 인터페이스를 상속 받아 fly 메서드를 구현하였습니다.");
        }
    }
     
    public class Penguin extends Birds implements Swimable {
     
        Penguin() {
            name = "펭귄";
        }
     
        @Override
        public void swim() {
            System.out.println(name + " 클래스는 Swimable 인터페이스를 상속 받아 swim 메서드를 구현하였습니다.");        
        }
    }
     
    public class Main {
     
        public static void main(String[] args) {
     
            Whale whale = new Whale();
            Bat bat = new Bat();
            Sparrow sparrow = new Sparrow();
            Penguin penguin = new Penguin();
            
            whale.swim();
            bat.fly();
            sparrow.fly();
            penguin.swim();
        }
    }
    cs

     

    출처 - 스프링 입문을 위한 자바 객체 지향의 원리와 이해

     

    반응형

    댓글

Designed by Tistory.