Java

[Java] Abstract, 다형성

kyra 2022. 12. 6. 09:52

https://youtu.be/g3iQH71q_2I

 


1. Abstract(추상화)

추상화는 복잡한 문제들 중 공통적인 부분을 추출하여 추상 클래스로 제공하고, 상속을 이용하여 나머지 클래스들을 하위 클래스로 제공하는 기법이다.

 

추상클래스 및 추상메서드 : 기능만 정의하고, 구현은 하위클래스에서 진행한다. 

 

추상클래스를 사용하면 상속을 강제하는 기능,

추상메서드를 사용하면 오버라이딩을 강제하는 기능을 갖는다.

 

즉 하위 클래스 및 메서드에서 추상클래스와 메서드의 기능을 모두 사용하게끔 강제하는 역할을 한다.

 

abstract class A{
    public abstract int b(); //추상메서드는 본체내용이 있으면 안된다.
    public void d(){  //추상 클래스 내 일반 메소드가 존재할 수 있다.
        System.out.println("world");
    }
}

class B extends A{ //추상클래스 A를 사용하려면 상속받는 클래스 B를 통해 사용 가능
    public int b(){ //int b()메서드도 추상메서드이므로, 오버라이딩해야 사용 가능
        return 1;
    }
}

 

 

 

2. 다형성(Plymorphism)

- 서로 다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능

- 상속, 객체의 형 변환, 메소드 오버라이딩을 통해 구현 가능하다.

 

1) 메소드와 다형성 (오버라이딩)

class O{
    public void a(int param){
        System.out.println("숫자 출력");
        System.out.println(param);
    }
    public void a(String param){
        System.out.println("문자 출력");
        System.out.println(param);
    }
}

public class PolymorphismOverloadingDemo{
    public static void main(String[] args){
        O o = new O();
        o.a(1); //이름이 같은 a메서드라도 안에 들어오는 파라미터의 형에 따라 다른 메서드를 실행
        o.a("one");
    }
}