abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것
abstract class A{
public abstract int b(); // {}중괄호 안의 내용일 함수 몸체가 없음
public void d(){
System.out.println("world");
}
}
class B extends A{
@Override
public int b() { // 상속받은 메소드 상세 구현
return 1;
}
}
클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언한느 역할
// 계산기
public interface Main {
//인터페이스에서 선언한 변수는 컴파일 과정에서 상수로 변환
double PI = 3.14;
int ERROR = -999999999;
//인터페이스에서 선언한 메소드는 컴파일 과정에서 추상 메소드로 변환
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
abstract
예약어를 쓰지 않아도 자동으로 추상메소드로 변환interface Flyable { // 동작만 정의
void fly (int x, int y, int z);
}
class Pigeon implements Flyable{ // implements로 구현
private int x,y,z;
@Override
public void fly(int x, int y, int z) {
printLocation();
System.out.println("날아갑니다");
this.x = x;
this.y = y;
this.z = z;
printLocation();
}
public void printLocation() {
System.out.println("현재위치: "+ x + ", "+y+", "+z);
}
}
public class Main{
public static void main(String[] args) {
Flyable pigeon = new Pigeon();
pigeon.fly(1, 2, 3);
}
}
구현하는 객체의 동작의 명세(specification) 또는 약속의 역할
다중상속 가능
인터페이스 간에도 상속 가능
extends
사용메소드 시그니처만 선언 가능
박은종, 『Do it! 자바 프로그래밍 입문』, 이지퍼블리싱(주), 2018
스파르타코딩클럽 <Java 실무 기초 KDT 실무형 스프링 백엔드 엔지니어 양성과정 1회차>