Developer/Java

27. JAVA 상속

Jeremy.Park 2014. 7. 3. 00:21
* 상속
 -> 기존 코드를 재사용
1] Specialization : 위에서 아래로 상속

          Car 

 Sedan     Truck
 
2] Generalization : [A] - [B] 공통적인 내용을 뽑아서 슈퍼클래스를 정의하는 것 









public class Episode01 {
       static class Car {
             String       name = "자동차";
             int          cc = 1998;
      
             public Car (){
                   // super(); // 자동으로 붙는다.즉, Object의 생성자 호출.
                   System. out.println( "Car()...");
                   name = "자동차하하" ;
                   cc = 2000;
            }
            
             public void start(){
                   System. out.println( "출발한다.");
            }           
             public void run() {
                   System. out.println( "가속한다.");
            }           
             public void stop(){
                   System. out.println( "멈춘다.");
            }           
      }

       static class Truck extends Car {
             int weight = 15000;           
            
             public Truck (){
                   /* super 클래스의 생성자 호출
                   * - 이 문장 이전에 다른 명령이 와서는 안된다.
                   */
                   //int i = 0; // 수퍼 클래스의 생성자 호출 전에 오면 오류!
                   super();   // 생략하면 자동의로 붙는다.  모든 생성자는 반드시 있다.
                   System. out.println( "Truck()...");
                   weight = 10000;
            }
            
             public void dump(){
                   System. out.println( "집을 내리다." );
                   weight = 0;
            }
      }
      
       public static void main( String[] args) {            
             /*    new Truck()
             * instance 생성 단계
             * 1) super 클래스를 찾아서 로딩 -> Car.class
             * 2) 생성 하려는 클래슬 찾아서 로딩 -> Truck.class
             * 3) super 클래스의 인스턴스 변수 준비 -> name, cc
             * 4) 해당 클래스의 인스턴스 변수 준비 -> weight
             * 5) super의 인스턴스 변수 초기화 문장을 수행 name="자동차", cc=1998
             *          해당 클래스의 인스턴스 변수 초기화 문장 수행      weight=15000
             * 6) Track() 생성자 호출     -> super()클래스의 Car()호출 -> super()클래스의 Object()호출
             *    -> 실행 => Car 실행(초기화실행) -> Truck 실행(초기화실행) -> 완료!.
             */
            
             Truck t = new Truck();

             System. out.println( t. name);
             System. out.println( t. cc);
             System. out.println( t. weight);
             System. out.println( "완료!");
            
             t.dump();
             t.start();
             t.run();
            
      }
}