본문 바로가기

Java/강의

Class 클래스와 다형성

Class 클래스
//2011-3-2  Class 클래스

class ClassSCB
{
  public static void main(String[] args)
  {
    ClassSCB A = new ClassSCB();    
    Class aClass = A.getClass();
    System.out.println(aClass.getName());
    return;
  }
}

Object 클래스의 getClass() 메소드 - 객체의 클래스를 돌려준다. 
객체의 클래스는 프로그램 실행중 Class 클래스의 객체로 나타난다. 
Class 클래스  
프로그램 실행중 각 객체의 클래스나 interface를 나타내기 위한 클래스 
객체가 속한 클래스의 이름을 출력하기 위한 getName() 메소드 Person 클래스에서의 사용예      

   ClassSCB A = new ClassSCB();    
  Class aClass = A.getClass();
  System.out.println(aClass.getName());
   
 
 실행결과의 출력문은 의 클래스 이름인 ClassSCB를 출력한다.
다형성 : 다형성이란 같은 종류이지만 여러가지 형태나 모양을 가지는 것을 의미한다.
/* print() 메소드를 서브클래스에서 재정의하고, 객체의 클래스를 서브클래스에서 수퍼클래스로 변환시켰을 경우 수퍼클래스의 print() 메소드가 호출되는 다형성을 보여주는 프로그램 */

class Generation
{
  public static void main(String[] args)
  {
    Father manF = new Father("Kennedy"87);
    Son manS = new Son("Nixon"45);
    manF.print();
    manS.print();
    manF = manS;
    manF.print();
  }
}

class Father
{
  String name;
  int age;

  public Father(String aName, int anAge)
  {
    name = aName;
    age = anAge;
  }

  protected void print()
  {
    System.out.println("\n I am Father : ");
    System.out.println(" Name : " + name);
    System.out.println(" Age : " + age);
  }
}

class Son extends Father
{
  public Son(String aName, int anAge)
  {
    super(aName, anAge);
  }

  protected void print()
  {  
    System.out.println("\n I am Son : ");
    System.out.println(" Name : " + name);
    System.out.println(" Age : " + age);
  }
}
 

▶ Father manF = new Father ("Kennedy", 87);  
   Son manS = new Son ("Nixon", 45);   
   객체 참조변수 manF와 manS선언과 객체생성   
 
▶ manF.print(); // Father 클래스의 메소드를 호출하고    
   manS.print(); // Son 클래스에 재정의된 print() 메소드를 호출   

▶ manF = manS;    manF는 Father 클래스의 객체에서 Son 클래스의 객체로 변환되었다.   
   manF가 처음에 가리키던 Father 클래스의 객체 Kennedy는 자동적으로 소멸된다 
  
▶ manF.print(); //다형성   객체변수 manF는 Father 클래스의 객체 참조변수로 선언되었지만, 
   이제 Son 클래스의 객체 Nixon를 가리킴으로    Son 클래스의 print() 메소드가 호출된다. 
  
이 경우에 manF가 어느 메소드를 호출할 것인지는 컴파일 과정에서 결정되지 않고, 프로그램 실행시에 결정된다. 동적 바인딩(dynamic binding) 또는 후기 바인딩(late binding) 일반적인 경우 호출되는 메소드는 컴파일 과정에서 결정 (정적 바인딩(static binding) 또는 조기 바인딩(early binding)이라고 한다

'Java > 강의' 카테고리의 다른 글

Object 클래스  (0) 2011.02.25
매소드 재정의 (Method Overriding)  (0) 2011.02.23
상속 (Inheritance)  (0) 2011.02.21
Random 클래스  (0) 2011.02.21
vector 클래스  (0) 2011.02.16