추상클래스&인터페이스

강9·2023년 12월 8일
0

Java

목록 보기
63/71
post-thumbnail

🔖 다형성 보장

  • 부모가 명령을 내리면 자식반드시 동작(반응)을 해야한다.
  • 다형성 전제조건 4가지 필수 --> (상속관계, 재정의, 업캐스팅,동적바인딩)
  • 반드시 재정의(override)가 되어야 한다.
  • 부모클래스를 추상클래스로 만든다.

💡 추상클래스란?

  • 불완전한 클래스
  • 메서드의 구현부가 없다.(추상메서드)
  • 접근제한자 뒤에 abstract를 붙여 사용한다.
  • 단독으로 객체를 생성할 수 없다.
  • 다형성을 일부 보장하기 위해 등장
  • 서로 비슷한 클래스의 공통된 부분들을 묶을 때 사용한다.
  • 부모의 역할로 사용한다.
  • 구현된 메서드를 가질 수 있다.

💡 추상메서드란?

  • 메서드의 구현부가 없는 메서드
  • 반드시 자식이 완전하게 재정의 해야한다.

pulic abstract class Animal {
	public abstract void eat(); // 구현부가 없는 추상메서드
}

🔖 인터페이스

  • 서로 다른 클래스의 공통된 부분을 묶을 때 사용한다.
  • 다형성이 100% 보장된다.
  • 부모가 인터페이스이면 자식의 내부 동작방식을 전혀 몰라도 동작 시킬 수 있다.
  • 부모의 역할을 할 수 있다.
  • 단독으로 객체를 생성할 수 없다.
  • 추상메서드final static 상수만 올 수 있다.
  • 구현된 메서드를 가질 수 없다.
  • 자식클래스에 implements를 붙여 사용한다.

🔖 인터페이스에서 사용하는 final static 상수

  • 상수는 기본적으로 대문자로 표기한다.
public interface RemoCon {
    // chUp(), chDown(), volUp(), volDown()

    public final static int MAXCH = 99;
    public final static int MINCH = 1;

    public void chUp();
    public void chDown();
    public void volUp();
    public void volDown();
    public void internet();
}
public class TV implements RemoCon{
    // chUp(), chDown(), volUp(), volDown()

    private int currch = 10;

    @Override
    public void chUp() {
        currch++;
        if(currch>RemoCon.MAXCH) {
            currch=1;
        }
        System.out.println("TV의 채널이 올라간다.");
    }

    @Override
    public void chDown() {
        currch--;
        if(currch<RemoCon.MINCH) {
            currch=99;
        }
        System.out.println("TV의 채널이 내려간다.");
    }

🔖 인터페이스와 다중상속

  • 자바는 기본적으로 단일상속만 지원한다.
  • 단, 인터페이스를 활용하여 다중상속을 구현할 수 있다.
// Dog는 Animal 클래스를 상속받고 Pet과 Robots 인터페이스를 구현했다.

public class Dog extends Animal implements Pet, Robots{

}


	Animal r = new Dog();
    Pet r = new Dog();
    Robots r = new Dog();
// 인터페이스가 인터페이스를 상속

public interface B extends A{

}

public class C implements B {

}


	B obj = new C();
    A obj = new C();

🔖 추상클래스와 인터페이스 공통점&차이점

📌 공통점

  • 다형성을 보장
  • 추상 메서드를 가질 수 있다.
  • 단독으로 객체를 생성할 수 없다.
  • 부모의 역할로 사용된다.(업캐스팅)

📌 차이점

  • 서로 비슷한 클래스의 공통부분을 묶을 때 사용 : 추상클래스
    -> 추상메서드와 구현메서드를 가질 수 있다.
  • 서로 다른 클래스의 공통부분을 묶을 때 사용 : 인터페이스
    -> 추상메서드와 final static 변수(상수)를 가질 수 있다.
profile
코린이 일기

0개의 댓글