추상클래스와 인터페이스의 공통점
- 객체를 생성할 수 없다.
- 추상 메서드를 포함한다.
- 선언부만 작성하고 구현부는 작성하지 않은 메서드
public void methodName();
- 상속받는 클래스에서는 추상 메서드를 반드시 재정의(overriding)해야 한다.
추상클래스
package abstractEx;
abstract class Animal {
public void cry();
System.out.println("동물 울음 소리");
}
package abstractEx;
class Dog extends Animal {
@Override
void cry() {
System.out.println("멍멍");
}
}
package abstractEx;
class Cat extends Animal {
@Override
void cry() {
System.out.println("야옹");
}
}
package abstractEx;
public class AbstractMain {
public static void (String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.cry();
cat.cry();
}
}
- 공통되는 부분을 추상클래스에 정의하고, 그 외의 부분을 자식클래스에서 확장하여 사용하기 위한 목적.
- 클래스다.
- 일반 메서드 정의가 가능하다.
- 클래스와 동일하게 변수 선언과 사용이 가능하다.
- 다중 상속이 불가능하다.
인터페이스
public interface Animal {
void cry();
}
class Dog implements Animal {
@Override
public void cry() {
System.out.println("멍멍");
}
}
class Cat implements Animal {
@Override
public void cry() {
System.out.println("야옹");
}
}
class Main {
public static void main(String[] args) {
Dog dog = new Dog();
Cat Cat = new Cat();
dog.cry();
cat.cry();
}
}
- 구현 객체의 동일한 실행 기능을 보장하기 위한 목적.
- 클래스가 아니다.
- 일반 메서드 정의가 불가능하다.
- 상수만 사용 가능하다. (모든 멤버 변수는 public, static, final이 포함되어 있다.)
- 다중 구현이 가능하다.