ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바의정석 Ex7_10 추상 클래스, 추상 메서드
    Java/자바의정석 2023. 2. 21. 13:23
    반응형
    package Chap07;
    
    public class Ex7_10 {
        public static void main(String[] args) {
            Unit[] group = { new Marine(), new Tank(), new Dropship() };
    
            for (int i = 0; i < group.length; i++)
                group[i].move(100, 200);
        }
    }   
    
    abstract class Unit {
        int x, y;
        
        //move라는 추상 메서드
        abstract void move(int x, int y);
        void stop() { }
    }
    
    class Marine extends Unit {
        
        //추상클래스를 완성시킴
        void move(int x, int y) {
            System.out.println("Marine[x=" + x + ",y=" + y + "]");
        }
        void stimPack() {  }
    }
    
    class Tank extends Unit { 
        void move(int x, int y) {
            System.out.println("Tank[x=" + x + ",y=" + y + "]");
        }
        void changeMode() { }
    }
    
    class Dropship extends Unit { 
        void move(int x, int y) {
            System.out.println("Dropship[x=" + x + ",y=" + y + "]");
        }
        void load()   {}
        void unload() {}
    }
     

    =============실행결과==============

    Marine[x=100,y=200]
    Tank[x=100,y=200]
    Dropship[x=100,y=200]

     

     

    Unit
    int x
    int y
    move(int x, int y)
    stop()

    Unit이라는 추상클래스가있다.


    추상클래스란?

    • 추상 메서드를 하나라도 가지고 있는 클래스를 추상 클래스라고 칭한다.
    • 추상 클래스는 객체로 생성이 불가능하다.
    • 객체를 생성하고 싶다면 추상 클래스를 상속받은 자식 클래스에서 해당되는 추상 메소드를 오버라이딩해서 구현을 한 뒤, 부모 클래스가 아닌 자식 클래스를 이용하여 객체를 생성해야 한다.

    추상메서드란?

    • 메소드는 기본적으로 ()선언부와 {}구현부로 나누어진다. 여기서 선언부()까지만 작성하고 구현부는 작성하지 않은 메서드를 추상 메서드라고 칭한다.

    추상클래스의 잠정은?

    • 추상 클래스에서 큰틀을 설계한 뒤 자식 클래스에서 상속을 받아서 각 클래스에 맞게 기능을 확장하는데 편리하다.
    • 자식 클래스에 추상 메소드의 구현을 강요하기 때문에 표준화 정도를 높임
    • 각 클래스들의 공통 사항을 한 곳(추상클래스)에서 관리할 수 있기 때문에 개발 및 유지보수가 편리하다.

    move(int x, int y)라는 춤상 메서드를 가지고 있기때문에 조건에 만족하게된다.

     

    Marine Tank Dropship
    move(int x, int y) move(int x, int y) move(int x, int y)
    stimPack() changeMode() load()
        unload()

     

    이와같이 추상클래스를 상속받게 된다면 부모가 가지고있는 추상 메서드 move(int x, int y) 를 구현시켜줘야한다.

     

    Unit[] group = { new Marine(), new Tank(), new Dropship() };
    
    for (int i = 0; i < group.length; i++)
        group[i].move(100, 200);

    여기서는 배열을 생성하여 같은 값을 넣어줬지만 각기 다른 값을 가져야하는 상황이면 다른 값을 넣어주면 된다.

    반응형

    댓글

Designed by Tistory.