abstract class Person
{
         private String name ; // 이름
         private int age ; // 나이
        
         public Person()
        {
               
        }
        
         public Person(String n , int a)
        {
                this.name = n ;
                this.age = a ;
        }
        
         public String getName()
        {
                return name ;
        }
        
         public void setName(String name )
        {
                this.name = name ;
        }
        
         public int getAge()
        {
                return age ;
        }
        
         public void setAge(int age)
        {
                this.age = age ;
        }
        
         // 잠자기
         public void sleep()
        {
                System. out.println(this .getName() + "이(가) 잠자기를 시작함.");
        }
        
         // 말하기 (추상메소드 적용)
         public abstract void speek();
}

class Student extends Person
{
         public Student()
        {
               
        }
        
         public Student(String n , int a)
        {
                super(n , a );
        }
        
         // 말하기 (추상메소드 적용)
         @Override
         public void speek()
        {
                System. out.println(this .getName() + "이(가) 말하기를 시작함.");
        }
        
         // 공부하기
         public void study()
        {
                System. out.println(this .getName() + "이(가) 공부를 시작함.");
        }

        
}

class StudentWorker extends Student
{
         public StudentWorker()
        {
               
        }
        
         public StudentWorker(String n , int a)
        {
                super(n , a );
                /*setName(n);
               setAge(a);*/
        }
        
         // 공부하기 @오버라이딩
         @Override
         public void study()
        {
                System. out.println("매우 바쁜 " + this.getName() + "이(가) 공부를 시작함." );
        }
        
         // 일하기
         public void work()
        {
                System. out.println(this .getName() + "이(가) 일하기를 시작함.");
        }
}

public class Exam02
{
         public static void main(String [] agrs)
        {
                // Person의 instance (Setter를 통해 필드값 설정)
                /*Person cgs = new Person();
               cgs.setName("최규식"); // 사람의 이름 설정
               cgs.setAge(20); // 사람의 나이 설정                  
               System.out.println(" cgs의 이름 : " + cgs.getName()); // 사람의 이름 출력
               System.out.println(" cgs의 나이 : " + cgs.getAge() + "세"); // 사람의 나이 출력                  
               cgs.speek(); // 말하기 메소드 실행 */         
               
                // Person의 instance (생성자를 통해 필드값 설정)
                /*Person steve = new Person("Steve Jobs", 60); // 생성자를 통해서 멤버변수 초기화  
               System.out.println(" steve의 이름 : " + steve.getName()); // 사람의 이름 출력
               System.out.println(" steve의 나이 : " + steve.getAge() + "세"); // 사람의 나이 출력
*/            
                // -------------------------------------------------------------------------------------
               
                // Student의 instance (Setter를 통해 필드값 설정)
                Student student_cgs = new Student ();
                student_cgs.setName("학생 최규식" ); // 이름 설정
                student_cgs.setAge(20); // 나이 설정               
                System. out.println("student_cgs의 이름 : " + student_cgs.getName()); // 학생의 이름 출력
                System. out.println("student_cgs의 나이 : " + student_cgs.getAge()); // 학생의 나이 출력
                student_cgs.study(); // 공부하기 메소드 실행
                student_cgs.speek(); // 말하기 메소드 실행
               
                // -------------------------------------------------------------------------------------
               
                // StudentWorker의 instance (Setter를 통해 필드값 설정)
                StudentWorker studentWorker_cgs = new StudentWorker();
                studentWorker_cgs.setName("고학생 최규식" );
                studentWorker_cgs.setAge(22);             
                System. out.println("studentWorker_cgs의 이름 : " + studentWorker_cgs.getName()); // 고학생의 이름 출력
                System. out.println("studentWorker_cgs의 이름 : " + studentWorker_cgs.getAge()); // 고학생의 나이 출력
                studentWorker_cgs.work();
                studentWorker_cgs.study(); // 공부하기 (@오버라이딩) 메소드 실행
               
                // StudentWorker의 instance (생성자를 통해 필드값 설정)
                StudentWorker studentWorker_steve = new StudentWorker("고학생 스티브잡스" , 25);        // 생성자를 통해서 멤버변수 초기화     
                System. out.println("studentWorker_steve의 이름 : " + studentWorker_steve.getName()); // 고학생의 이름 출력
                System. out.println("studentWorker_steve의 이름 : " + studentWorker_steve.getAge()); // 고학생의 나이 출력
                studentWorker_steve.work();
               
        }
}