Published 2022. 10. 3. 21:54
반응형
추상 클래스 란?
- 하나 이상의 추상 메소드를 포함한 클래스
추상 메소드 란?
- 선언부만 존재하고, 구현부는 존재하지 않는 메소드
- 자식 클래스가 추상 클래스를 상속받고, 자식 클래스에서 추상 메소드를 오버라이딩을 통해 직접 구현해야 함
- 반드시 특정 메소드를 만들도록 에러를 발생시켜서 강제성 부여
abstract static class Animal {
abstract void speak();
}
static class Dog extends Animal {
@Override
void speak() {
System.out.println("멍멍");
}
}
- 만약 위 코드에서 Animal을 상속받은 Dog 클래스에 speak 메소드가 구현되지 않았으면 에러 발생
- 또한 추상 클래스로는 객체를 생성할 수 없음
- Animal animal = new Animal(); 안 됨
인터페이스 란?
- 클래스와 유사하게 다형성을 적용할 수 있음
- 클래스는 extends로 상속받는 반면, interface는 implements로 구현
- 추상 메소드만을 가질 수 있음
- 컴파일러가 interface의 메소드들에 자동으로 public abstract 붙여줌
- 인터페이스도 추상클래스와 마찬가지로 객체 생성 불가능
- JAVA는 클래스 다중 상속을 지원하지 않는데, 인터페이스는 다중 상속이 가능
- 사용 예시) OS회사가 프린터 interface를 제공하면 프린터 회사들은 interface 규격에 맞게끔 메소드 생성
인터페이스 예제 1 - 프린터 예제
public class Test {
public static void main(String[] args) {
Printer printer = new SPrinterDriver();
printer.print("출력 메세지");
printer = new LPrinterDriver();
printer.print("출력 메세지");
}
interface Printer {
void print(String message);
}
static class SPrinterDriver implements Printer {
@Override
public void print(String message) {
System.out.println("삼성 프린터 출력 : " + message);
}
}
static class LPrinterDriver implements Printer {
@Override
public void print(String message) {
System.out.println("LG 프린터 출력 : " + message);
}
}
}
인터페이스 예제 1 결과
삼성 프린터 출력 : 출력 메세지
LG 프린터 출력 : 출력 메세지
인터페이스 예제 2 - 다중 상속 예제
public class Test {
public static void main(String[] args) {
FlyingCar flyingCar = new FlyingCar();
flyingCar.drive();
flyingCar.fly();
}
interface Drivable { void drive(); }
interface Flyable { void fly(); }
static class FlyingCar implements Drivable, Flyable {
@Override
public void drive() {
System.out.println("Drive");
}
@Override
public void fly() {
System.out.println("Fly");
}
}
}
인터페이스 예제 2 결과
Drive
Fly
interface에서의 default method
- Java 8부터 추상메소드가 아닌 메소드를 interface 안에 넣을 수 있게됨
public class Test {
public static void main(String[] args) {
FlyingCar flyingCar = new FlyingCar();
flyingCar.drive();
flyingCar.fly();
flyingCar.defaultMethod();
}
interface Drivable {
void drive();
default void defaultMethod() {
System.out.println("default method 실행됨");
}
}
interface Flyable { void fly(); }
static class FlyingCar implements Drivable, Flyable {
@Override
public void drive() {
System.out.println("Drive");
}
@Override
public void fly() {
System.out.println("Fly");
}
}
}
default method 예제 결과
Drive
Fly
default method 실행됨
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] Big Integer (0) | 2022.10.03 |
---|---|
[JAVA] String Builder, String Buffer (1) | 2022.10.03 |
[JAVA] 다형성(Polymorphism) 정의 및 활용(UpCasting, DownCasting) + instanceof (2) | 2022.10.03 |
[JAVA] 우선순위 큐 (Priority Queue), 정렬 전략 설정법 (0) | 2022.05.28 |
[JAVA] BufferedReader, BufferedWriter, StringBuilder (0) | 2022.05.24 |