추상클래스, 인터페이스

수정이·2022년 4월 12일
0

JAVA

목록 보기
3/8
post-thumbnail

추상클래스(Abstract Class)


  • 추상 클래스
    • 구현 코드 없이 메소드의 선언만 있는 추상 메소드를 포함한 상속을 위한 클래스이다.
    • 일부 메소드는 구현하고, 일부 메소드는 구현하지 않을 수 있다.
    • 하위 클래스에서 공통으로 사용할 메소드는 상위 클래스에서 구현한다.
    • 메소드 선언 : 반환타입, 메소드 이름, 매개변수로 구성한다.
    • 메소드 정의 : 메소드 구현과 동일한 의미 구현부를 가진다.{ }
int add(int x, int y); // 메소드 선언
int add(int x, int y) {}; //메소드 정의
  • abstract 예약어를 사용한다.
  • 추상 클래스는 인스턴스화 할 수 없다. new 생성자();가 안된다.
public Student student = new Student(); // Student 클래스가 추상클래스라고 한다면, 에러가 발생한다.

추상클래스 구현


public abstract class  Computer { // 추상 메소드를 가지고 있으므로 추상 클래스이다.

	abstract void display(); // 추상 메소드
	abstract void typing(); // 추상 메소드
	
	public void turnOn() {
		System.out.println("전원을 켭니다.");
	}
	
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}
}
  • 모든 메소드가 구현 된 클래스여도 abstract로 선언되면 추상 클래스가 되어 인스턴스화 할 수 없다.
public abstract class  Computer {

	public void display() {
    	System.out.println("화면을 켭니다.");
    }
	public void typing() {
    	System.out.println("입력을 합니다.");
    }
	
	public void turnOn() {
		System.out.println("전원을 켭니다.");
	}
	
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}
}
  • 추상 클래스의 추상 메소드는 하위 클래스가 상속하여 구현한다.
  • 이미 구현된 메소드를 오버라이딩 할 수 있다.
public class DeskTop extends Computer{

	@Override
	void display() {
		System.out.println("DeskTop display");
	}

	@Override
	void typing() {
		System.out.println("DeskTop typing");
	}

	@Override
	public void turnOff() {
		System.out.println("Desktop turnoff");
	}
}

인터페이스


  • 인터페이스
    • 인터페이스 내 모든 메소드는 추상 메소드로 선언된다.
      public abstract를 선언하지 않아도 자동으로 선언된다.
    • 인터페이스 내 모든 변수는 상수로 선언된다. public static final를 선언하지 않아도 자동으로 선언된다.
  • 자바에서 클래스 상속은 단일 상속만 되지만 인터페이스는 구현 코드가 없으므로 여러 인터페이스를 구현(상속)할 수 있다.

인터페이스 구현


  • 인터페이스 생성
public interface Calc {

	double PI = 3.14;
	int ERROR = -99999999;
	
	int add(int num1, int num2);
	int substract(int num1, int num2);
	int times(int num1, int num2);
	int divide(int num1, int num2);
	
}
  • 추상 메소드를 모두 구현하지 않고 일부만 구현하면 추상클래스가 된다.
public abstract class Calculator implements Calc{

	@Override
	public int add(int num1, int num2) {
		return num1 + num2;
	}

	@Override
	public int substract(int num1, int num2) {
		return num1 - num2;
	}
}
  • 구현되지 않은 추상 메소드 구현
public class CompleteCalc extends Calculator{
	
	@Override
	public int times(int num1, int num2) {
		return num1 * num2;
	}

	@Override
	public int divide(int num1, int num2) {
		if( num2 == 0 )
			return ERROR;
		else 
			return num1 / num2;
	}
}

0개의 댓글