일반클래스
public class TestAbstract {
public void func1() {
System.out.println("일반 method");
}
public void func2() {
System.out.println("일반 method");
}
}
보통 클래스는 위처럼, method의 선언부와 구현부분으로 구성되어지죠
메소드의 선언부는 public void func1(), public void func2() 가되구요.
구현부분의 fun1(), fun2()메소드안의 내용이 됩니다.
추상클래스 (abstract)
public abstract class TestAbstract {
public abstract void func1() ;
public void func2() {
System.out.println("일반 method");
}
}
위의 예제에서 func1()은 좀 이상하게 생겼죠? 다시 말해 method의 prototype (선언부)만 있지 실제 method body는 없다(이런 method를 가리켜 abstract method라고 한다). 또한 이 같은 method를 만들 때 abstract란 키워드가 사용되구요.
이 같은 abstract method를 하나라도 가지고 있는 class는 abstract class로 정의해야 합니다. 이런 클래스가 추상클래스죠.
인터페이스 (Interface)
public interface Test {
public static final int XXX = 7;
public int YYY = 8;
public void func1();
public void func2();
}
바로 전에 abstract class에 대해서 설명했죠? 이것은 abstract method를 가지고 있는 class이다. 그런데 abstract class는 abstract method가 아닌, 즉 body를 가지고 있는 일반 method도 가질 수 있다.
그런데, interface라는 것은 일종의 abstract class인데, 이것이 가지고 있는 method들은 모두가 반드시 abstract method들이어야 한다. 다시 말해서 abstract method만 가지고 있는 abstract class가 interface인 것입니다.
그리고, 추상클래스나 인터페이스는
Test tObject = new Test() 와 같은 형식으로 객체를 생성할수 없죠.
일반클래스는 가능하지만..
추상클래스나 인터페이스는 그클래스를 직접적으로 사용하는것이아니라,
class Child implements Test {
public void func1() {
System.out.println(XXX);
}
public void func2() {
System.out.println(YYY);
}
}
처럼, 인터페이스나, 추상클래스를 상속받은 클래스를 사용하게 되죠.
Test tObject = new Child();
Child cObject = new Child();
위 두개모두가 가능합니다.
그럼.. 자세한건 책을참조하세요.
출처 : http://kin.naver.com/db/detail.php?d1id=1&dir_id=10106&eid=TrA9rFuUoebD6QlRRPOX0Cm1fJHqQPkO&qb=w9+78yDFrLehvbogwM7FzcbkwMy9ug==