Java

16 [인강] 자바의정석 ch07

Rosie_dev 2020. 12. 28. 00:02

| 여러종류의 객체를 배열로 다루기

  다형성 장점: 다형적 매개변수

                   하나의 배열에 여러종류 객체 저장

  Product p[ ] = new Product[3];

  p[0] = new Tv();

  p[1] = new Computer();

  p[2] = new Audio();

  

  //public class Vector extends AbstractList           가변배열기능

                   implements List, Cloneable, java.io.Serializable {

            protected Object elementData[ ];

             ...............

      }

 

  class Buyer {
       int money = 1000;

       int bonusPoint = 0;

       product [ ] cart = new Product[10];

       int i = 0;

       void buy(Product p) {

            if (money < p.price) {

                   System.out.println("잔액부족");

                   return;

            }

            money -= p.price;

            bonusPoint += p.bonusPoint;

            cart[i++] = p;

        }

  }

 

  Ex7_9


| 추상클래스, 추상메서드

  추상클래스: 미완성 클래스, 미완성 메서드를 갖고 있는 클래스

  abstract class Player {

             abstract void play(int pos);         //{ }이 없는 메서드, 추상메서드

             abstract void stop();

  } 
  //abstract 붙이면 오류안남  

  //설계도가 미완성이면 제품생성불가, 즉, 인스턴스 생성 불가. but 다른 클래스 작성에 도움

  //extends로 자손에서 구현

  

  메서드 → 선언부+구현부{ }

  자손마다 다르게 구현될 것으로 예상되는 경우, 추상메서드로 작성

  abstract class Player {

            boolean pause;                  //iv

            int currentPos;               

            player ( ) {                        //추상클래스의 생성자

                 pause = false;

                 currentPos = 0;

            abstract void play(int pos);            //추상메서드

            abstract void stop( );

            void play( ) {                              //상속, 자손객체생성 후 인스턴스메서드 호출가능

                   play(currentPos);

            }

  }


| 추상클래스의 작성

  기존 클래스의 공통부분을 뽑아서 추상클래스를 만들기도 함

  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;

      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() { }

  }


 

  설계도를 쉽게 작성, 관리가 용이, 중복제거

  GregorianCalendar cal = new GregorianCalendar();    //구체적

  Calendar cal = Calendar.getInstance();                    //추상적


| 인터페이스의 선언, 상속, 구현

  (핵심)추상메서드의 집합, 모든 멤버가 public

  추상클래스 vs 인터페이스

  //인터페이스는 iv, 생성자, 인스턴스 메서드를 가질 수 없다

     but, 상수, 추상메서드, static매서드, 디폴트메서드 가능

  interface 이름 {

          public static final 값;

          public abstract 메서드이름();

  }

  //public, abstract는 일부나 전부 생략가능


  다중상속이 가능하고, 인터페이스만 조상이 가능

  추상메서드는 충돌해도 문제 없음

  interface Fightable extends Movable, Attackable { } 


  인터페이스의 구현     //추상클래스 구현과 유사

  class 이름 implements 인터페이스이름 { }

  

  interface Fightable {
           void move ( int x, int y );            //public abstract 생략

           void attack( Unit u );

  }

  class Fight implements Fightable {

        public void main (int x, int y) { }

        public void attack( Unit u ) { }

  }

'Java' 카테고리의 다른 글

18 [인강] 자바의정석 ch08  (0) 2020.12.29
17 [인강] 자바의정석 ch07  (0) 2020.12.28
15 [인강] 자바의정석 ch07  (0) 2020.12.23
14 [인강] 자바의정석 ch07  (0) 2020.12.22
13 [인강] 자바의정석 ch07  (0) 2020.12.21
댓글