abstract class AbsClass1 { //추상클래스
abstract void absMethod1(); //추상메서드
abstract void absMethod2(); //추상 메서드
}
abstract class AbsClass2 extedns AbsClass1 {
void absMethod1() {
...추상 메서드 구현부...
}
abstract void absMethod3(); //AbsClass2의 추상메서드
//AbsClass1의 absMethod2추상 메서드를 AbsClass2에서 구현하지 않았는데,
//이는 Abs2Class2를 상속받을 클래스에서 구현해도 된다.
}
class NormalClass extedns AbsClass2 {
void absMethod2() { //미구현된 추상클래스 구현
...구현부...
}
void absMethod3() { //미구현된 추상클래스 구현
...구현부...
}
//absMethod1은 AbsClass2에서 구현했다.
}
interface Swimmable { //선언부에 class대신 interface
void swim(); // 메서드 선언부에 public abstract를 붙여야하나 생략 가능.
}
interface Walkable {
void walk();
}
// extends키워드가 아닌 implements(구현)를 사용.
// 그리고 두 개 이상의 인터페이스를 다중 상속하는 게 가능.
class NormalClass implements Swimmable, Walkable {
public void swim() { //인터페이스에 정의된 추상메서드를 구현해야 함.
...구현부...
}
public void walk() {
...구현부...
}
}
클래스 상속과 인터페이스 구현을 통해 다형성(한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있는 것)을 활용할 수 있다. 다음에 이 부분을 공부해보고 글을 작성해 봐야겠다.