Java

객체(Object) - 추상클래스(abstract class)

제주니어 2022. 9. 24. 22:47

추상클래스(abstract class)

추상클래스란?

  • abstract class 클래스이름 {}
  • 미완성 메서드(추상메서드)를 포함하고 있다는 의미.
  • 추상 클래스는 미완성의 클래스이기 때문에 객체 생성이 불가능하다.
  • 추상 클래스는 객체 생성이 안될 뿐 참조 변수로 사용이 가능하다.
  • 다형성을 적용해서 자식 객체를 참조할 수 있다.
  • 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다.
  • 추상 클래스를 부모 타입으로, 객체로 생성될 실체 클래스가 자식 타입으로 구현되어 추상 클래스의 모든 특성을 물려받을 수 있다.
  • 추상 클래스는 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없고 부모 클래스로만 사용된다.
  • 관련 있는 클래스들의 공통된 필드와 메소드의 이름을 통일할 수 있다.
  • 추상 클래스를 상속받는 자식 클래스를 작성하는 시간을 절약할 수 있다.
  • 유지 보수와 코드 관리가 편해진다.

추상메서드(abstract method)

  • abstract 리턴타입 메서드이름();
  • 메서드는 선언부와 구현부로 구성되어 있지만, 추상메서드는 선언부만 작성하고 구현부는 없다.
  • 추상 클래스에 선언된 메소드가 자식 클래스마다 실행 내용이 달라야 하는 경우 추상 메소드를 선언할 수 있다.
  • 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만 작성하고 실제 내용은 상속받는 클래스에서 구현하도록 비워둔다.
  • 추상 클래스를 상속하는 자식 클래스는 반드시 추상 메소드를 오버라이딩 해야 한다.
    public abstract class Sports {
    	// 참여하는 사람의 수
    	private int numberOfPlayers; 
    	
    	public Sports() {
    	}
    
    	public Sports(int numberOfPlayers) {
    		super();
    		this.numberOfPlayers = numberOfPlayers;
    	}
    
    	public int getNumberOfPlayers() {
    		return numberOfPlayers;
    	}
    
    	public void setNumberOfPlayers(int numberOfPlayers) {
    		this.numberOfPlayers = numberOfPlayers;
    	}
    	
    	// 스포츠 마다 적용될 룰을 추상 메소드로 정의
    	public abstract void rule() ; 
    
    }
    
    public class BasketBall extends Sports {
    
    	public BasketBall() {
    	}
    	
    	public BasketBall(int numberOfPlayers) {
    		super(numberOfPlayers);
    	}
    	
    	@Override // 추상메서드 구현
    	public void rule() {
    		System.out.println("BasketBall의 선수의 수는 " + super.getNumberOfPlayers() + "명, 공을 던져서 링에 넣어야한다.");
    	}
    
    }
    
    public class FootBall extends Sports {
    
    	public FootBall() {
    	}
    	
    	public FootBall(int numberOfPlayers) {
    		super(numberOfPlayers);
    	}
    
    	@Override // 추상메서드 구현
    	public void rule() {
    		System.out.println("FootBall의 선수의 수는 " + super.getNumberOfPlayers() + "명, 공을 차서 골대에 넣어야한다.");
    	}
    }
    

 

추상클래스의 작성

  • 여러 클래스의 공통적으로 사용되는 클래스를 바로 작성하거나, 기존의 클래스의 공통적인 부분을 뽑아 추상 클래스로 만들어 상속하도록 하는 경우가 있다 .
  • 추상클래스도 생성자가 있어야 한다.