본문 바로가기

develop/Java

객체지향 추상화

으으윽

 

추상 abstract 

 

-추상메서드 

기본적으로 메서드는 [접근제한자] 리턴할명 메서드명(){} 구조로 이뤄져있는데

추상메서드는 [접근제한자] abstract 리턴타입 메서드명(); 로 끝난다.

 

접근제한자와 리턴타입 사이에 abstract를 넣고 마지막을 세미콜론으로 마무리함.

{ 대신 ;로 메서드를 마무리하면서 구현부가 사라지게 되는데 이렇게 되면 외부에서 호출이 안되는 메서드다.

=> 즉, 서브클래스의 오버라이딩을 목적으로 정의하는 메서드

서브클래스들의 '모양은 동일하고 수행할 코드가 다른' 메서드들을 추상클래스 내의 추상메서드로 통일해 정의

(교실 청소라는 슈퍼클래스의 추상적 개념을 청소(바닥,칠판,창문)라는 서브클래스들로 오버라이딩)

서브클래스에서 상속받아 오버라이딩 하도록 강제성을 부여함.

 

단, 추상메서드를 포함하는 클래스는 반드시 추상클래스여야 함!

 

 

 

-추상클래스

추상 메서드 자체가 호출되면 안되기 때문에 인스턴스 생성을 차단해

인스턴스(객체)생성이 불가능한 클래스이며 미완성 클래스라고도 한다. 

추상클래스는 인스턴스 생성은 불가능 하지만 참조변수 타입으로 사용은 가능함 => 업캐스팅을 통해 다형성 활용 가능

 

추상메서드를 포함하는 클래스는 추상클래스로 선언되어야 하는데 그렇다고 해서

모든 추상클래스가 추상메서드를 포함하는 것은 아니다!

추상클래스가 가질 수 있는 것 : 일반 메서드, 추상 메서드, 생성자, 멤버변수

 

추상클래스의 생성자는 직접 호출이 불가능하지만 슈퍼클래스의 생성자를 호출하거나

서브클래스에서 추상클래스의 생성자를 통해 멤버변수 초기화 등의 용도로 사용한다.

 

추상클래스를 상속받는 서브클래스에서는 반드시 추상클래스 내의 추상메서드에 대한 오버라이딩을 해야함!

=> 오버라이딩을 안할 경우 추상클래스로 선언되어야 하며,

또 다른 서브클래스가 상속받아 최종적으로 오버라이딩 해야함

추상메서드에 대한 구현(implement)를 강제함으로써 코드의 강제성 및 통일성을 제공함.

 

추상클래스 

[접근제한자] abstract class 클래스명{

//멤버변수

//생성자

//일반메서드, 추상메서드

}

abstract class AbstractClass{ //추상클래스
	int num;
    static int num2;
    
    public AbstractClass(){
    	super();
        this.num = 10;
    }
    
    public void normalMethod(){
    	System.out.println("추상클래스에서 정의한 일반 메서드");
    }

	public abstract void abstractMethod();
    //추상메서드
}

class SubClass extends AbstractClass{
	@Override
    public abstract void abstractMethod(){
    	//서브클래스에서 오버라이딩 된 추상메서드
    }

}

 

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

인터페이스(Interface)  (0) 2021.03.20
객체지향 다형성  (0) 2021.03.15
final 키워드, 상수  (0) 2021.03.11
instanceof 연산자,동적바인딩  (0) 2021.03.08
레퍼런스 형변환  (0) 2021.03.08