Java09 Abstract, Interface
Abstract 추상 클래스: 하나 이상의 abstract method 를 가질 수 잇는 클래스
new 연산자 사용 불가 (바디가 없어서)
abstract method : body 없이 (선언만 되어있는)
상속 받은 자식 클래스가 "반드시" 구현해야 함
public abstract class Animal {
public abstract void bark();
> body가 없는 메소드.
상속받는 자식 클래스에서 반드시 구현해주어야함.
public void eat(String feed){
system.out.println(feed+"먹는다");
}
}
public class Cat extends Animal {
> Animal을 상속받는 Cat class
@Override
public void bark(){
> Animal의 메소드를 구현해줌
system.out.println("애옭");
}
}
public static void main(String[] args) {
Animal a = new Animal();
> 객체를 만들 수 없음. 추상 class의 추상 method를 가지기 때문에
Animal cat = new Cat();
> Animal 부모타입의 Cat이라는 자식 객체 생성 가능
cat.bark();
cat.eat("참치캔");
}
Interface :모든 method가 abstract method , 변수가 상수화 (static final) 자동으로 생성됨
-메소드는 abstract 를 붙이지 않고 선언만 한다. 어차피 다 추상메소드이기 때문에
Interface 를 상속 받으면 > implement 생성
protected 불가
추상클래스는 말그대로 클래스이고, interface는 구현하기 전에 메소드에 대해 명세된 것이랄까?
그래서 상속을 받음에도 불구하고 클래스에선 상속이라고 쓰지만 interface는 implemets(구현) 이라고 쓴다.
추상클래스의 정의는 abstract 메소드가 하나라도 존재하는 클래스를 일컫는다.
때문에 일부는 구현된 메소드도 있고, abstract라고 붙어있는 메소드는 구현이 안되어있다.
추상클래스를 상속받는 클래스는 반드시 추상메소드를 구현해야한다.
그래서 필수적으로 구현해야할 메소드가 있을 때 추상클래스를 쓰게된다.
인터페이스는 구현체 없이, 메소드에 대한 명세만 되어있다.
인터페이스를 상속받는 클래스에서는 반드시 인터페이스에 있는 메소드를 다 구현해야한다.
자바는 단일상속을 지원하기 때문에 추상클래스는 단일상속이지만,
interface를 사용하게 되면, implements를 구현하는 부분에서 extends 또한 사용할 수 있다.
즉, 다중상속이 가능해진다.
'이러이러한 메소드를 쓸 것이다.' 인터페이스에 선언을 해놓고, 가져다가 반드시 선언된 그대로 모두 구현하면 되는게 인터페이스이고,
이러이러한 메소드가 있지만 가져다 쓰거나 오버라이드 하거나, abstract가 붙은 메소드는 반드시 구현하면 되는게 abstract class이다.
Author And Source
이 문제에 관하여(Java09 Abstract, Interface), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@charamee/Java09-Abstract-Interface저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)