0%
  
  
    
      
      
    
  
  
  
    
    
      
      
      
    
    
      
    
    
    
      
    
    
    
    
        다형성 (Polymorphism)
다형성의 특징
- 부모 클래스 타입으로 자식 클래스 객체를 참조하는 특징
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | public class Foo {public void methodA() {
 return;
 }
 }
 
 public class Bar extends Foo {
 public void methodB() {
 return;
 }
 }
 
 | 
- 부모 클래스로 자식 클래스를 참조한 경우, 자식 클래스의 메소드는 사용할 수 없다.
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | public class Main {public static void main(String args[]) {
 Bar bar = new Bar();
 Foo foo = (foo)bar;
 
 foo.methodA();
 
 }
 }
 
 | 
- 자식 클래스로 부모 클래스를 참조하려 하면 java.lan.ClassException오류 발생
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | public class Main {public static void main(String args[]) {
 Foo foo = new Foo();
 Bar bar;
 
 
 if (foo instanceof Bar) {
 bar = (Bar)foo;
 }
 }
 }
 
 | 
- Method overriding은 메모리상의 객체의 타입을 따른다. (Virtual method call)
- 멤버 변수의 재정의는 선언된 객체의 타입을 따른다. (문법적으로 본다)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 
 | public class Foo {public String x = "Super";
 
 public void methodA() {
 System.out.println("Super");
 }
 }
 
 public class Bar extends Foo {
 public String x = "Sub";
 
 @override
 public void methodA() {
 System.out.println("Sub");
 return;
 }
 }
 
 public class Main {
 public static void main(String args[]) {
 Bar bar = new Bar();
 Foo foo = (Foo)bar;
 
 System.out.println(bar.x);
 bar.methodA();
 
 System.out.println(foo.x);
 foo.methodA();
 }
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | class Foo {public Foo getInstance() {
 return this;
 }
 }
 
 class Bar extends Foo {
 public Bar getInstance() {
 return this;
 }
 }
 
 | 
추상 클래스 (Abstract Class)
- 일부 메소드가 구현되지 않고 선언만 되어 있는 클래스
- 자식 클래스에서 반드시 구현해야 하는 메소드를 abstract로 선언
- 필요한 클래스가 모두 구현될 수 있도록 강제
 
추상 클래스의 선언
- abstract키워드를 이용해 class를 선언
- abstract키워드를 이용해 abtract 키워드를 이용해 method를 선언
| 12
 3
 4
 5
 6
 7
 
 | abstract class AbstractFoo {public void method() {
 return;
 }
 
 public abstract void abstractMethod();
 }
 
 |