추상클래스
추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스 - 미완성 설계도
상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없음
class 앞에 "abstract" 예약어를 사용하여 상속을 통해서 구현해야한다는 것을 알려주고 선언부만 작성하는 추상메서드를 선언할 수 있다.
abstract class 클래스이름 {
...
public abstract void 메서드이름();
}
인터페이스
추상클래스 - 미완성 설계도
인터페이스 - 기본 설계도
인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하고 클래스와 다르게 다중상속(구현)이 가능함.
interface 인터페이스이름 {
public static final 상수이름 = 값;
public abstract void 메서드이름();
}
추상클래스 VS 인터페이스
공통점 : 추상메서드를 사용 가능 -> 인터페이스를 왜 사용하는가? -> 다중상속의 가능 여부
자바의 특성상 한개의 클래스만 상속이 가능하다
-> 만약 부모 클래스의 추상 메소드 중 상속받을 클래스에서 사용하지 않는 메소드가 존재한다면?
자식 클래스는 부모의 추상 메소드 구현이 필수이기 때문에 비효율 발생
해당 클래스의 구분을 추상클래스 상속을 통해 해결, 할 수 있는 기능들은 인터페이스로 구현
추상클래스 인터페이스 예제 (생명체)
인간과 동물은 생명체를 상속
각 생명체들은 구분에 따라 인간과 동물을 상속
각각 할 수 있는 기능들을 인터페이스로 구현
Creature 추상클래스
public abstract class Creature {
private int age;
public abstract void attack();
public Creature(int age) {
this.age = age;
}
}
Animal 추상클래스
public abstract class Animal extends Creature{
public Animal(int age) {
super(age);
}
@Override
public void attack() {
System.out.println("몸을 사용하여 공격");
}
}
동물 클래서는 생명체이기 때문에 Creature 추상클래스를 상속
동물은 몸을 사용하여 공격하기 때문에 추상메서드 중에 attack메서드를 오버라이딩
Human 추상클래스
public abstract class Human extends Creature implements Talkable{
public Human(int age) {
super(age);
}
@Override
public void attack() {
System.out.println("도구를 사용해서 공격");
}
@Override
public void talk() {
System.out.println("사람은 말을 할 수 있다.");
}
}
attack을 추상메서드로 구현
인간 클래스는 동물 클래스와 다르게 Talkable 인터페이스를 구현
Talkable 인터페이스
public interface Talkable {
abstract void talk();
}
Talk 인터페이스에서는 추상메서드를 하나만 선언
Flyable 인터페이스
public interface Flyable {
void fly();
}
새 종류의 동물 클래스에 구현시킬 Flyable 인터페이스
Pigeon 일반클래스
public class Pigeon extends Animal implements Flyable{
public Pigeon(int age) {
super(age);
}
@Override
public void fly() {
System.out.println("비둘기 비행");
}
}
동물 클래스를 상속하는 일반 클래스
날수 있는 동물이기에 Flyable 인터페이스를 구현해주고 해당 메서드들을 구현
Swimable 인터페이스
public interface Swimable {
void swimDown();
}
Turtle 일반클래스
public class Turtle extends Animal implements Swimable{
public Turtle(int age) {
super(age);
}
@Override
public void swimDown() {
System.out.println("거북이 수영");
System.out.println("최대 50m 잠수");
}
}
거북이 클래스에서 수영 기능 구현
Kevin 일반클래스
public class Kevin extends Human implements Programmer, Swimable{
public Kevin(int age) {
super(age);
}
@Override
public void swimDown() {
System.out.println("케빈 수영");
System.out.println("최대 10m 잠수")
}
}
Kevin클래스에서도 오버라이딩하여 재정의
Kevin은 수영도 할 수 있고 코딩도 할 수 있다 -> 인터페이스의 장점 다중 구현
Programmer 인터페이스
public interface Programmer {
void coding();
}
'CS > JAVA' 카테고리의 다른 글
자바 - 예외 처리 : try catch (0) | 2022.04.21 |
---|---|
자바 - 오버로딩, 오버라이딩 (0) | 2022.04.20 |
자바 - 업캐스팅 & 다운캐스팅 (0) | 2022.04.13 |
자바 - 상속 (0) | 2022.04.10 |
자바 - static & final (0) | 2022.04.10 |