본문 바로가기

👩‍💻 BackEnd/☕️ 자바 [Java]

[Java] 추상클래스

추상클래스

: 구체적이지 않은 클래스를 의미. 
예 ) 독수리, 타조는 구체적인 새를 지칭하는 데 새, 포유류 같은 것은 구체적이지 않다. 
 
추상클래스 정의하기 
  • 추상클래스는 클래스 앞에 abstract 키워드를 이용해서 정의한다. 
  • 추상클래스는 미완성의 '추상 메소드'를 포함할 수 있다.   
  • '추상 메소드'란, 내용이 없는 메소드이다. 즉, 구현이 되지 않는 메소드이다. 
  • '추상 메소드'는 리턴 타입 앞에 abstract 라는 키워드를 붙여야한다. 
  • 추상 클래스는 인스턴스를 생성할 수 없다. 
public abstract class Bird{
	public abstract void sing ();
    
    public void fly(){
    	System.put.println("날다");
        }
}

- sing은 추상 메소드 메소드에 대한 설명 없이 바로 끝나므로 추상 메소드이며 구현이 되지 않음. 

 

추상 클래스를 상속 받는 클래스 생성하기
  • 추상 클래스를 상속받은 클래스는 추상클래스가 갖고 있는 추상 메소드를 반드시 구현해야한다.
  • 추상 클래스를 상속받고, 추상클래스가 갖고 있는 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다.
public class Duck extends Bird {
	@override 
    public void sing(){
    	System.out.println("꽥꽥!");
        }
}
 
- 클래스 Duck은 Bird라는 추상 클래스를 상속받아 추상메소드인 sing(메소드 안에 내용이 없음)을 구현하고 있다. 
- 추상 클래스인 Bird를 상속받은 클래스 Duck은 sing이라는 추상 메소드를 구현하지 않으면 Duck이라는 클래스도 추상 클래스가 된다는 말임.
 
사용하기
  • Bird는 추상 클래스이므로 객체를 생성할 수 없다.
    public class DuckExam { 
        public static void main(String[] args) {
            Duck duck = new Duck();
            duck.sing();
            duck.fly();

            //Bird b = new Bird();
        }   
    }

- Duck은 추상 클래스를 상속 받았지만 추상 메소드인 sing을 구현해 추상 클래스가 아님! 따라서 객체생성 즉, 인스턴스화가 잘 됨. 

하지만, 추상 클래스인 Bird는 추상 클래스이므로 객체를 생성할 수 없다!