'@Override' 키워드를 사용하지 않고 메서드 재정의 과정에서 메서드이름에 오타가 발생하더라도 에러가 아닌 새로운 메서드로 인식.
'@Override' 키워드를 사용하더라도 자식클래스를 구현하는 개발자의 실수로 인해 부모의 기능이 재정의 되지 않으면 다형성 구현 실패.
추상화
위 와 같은 문제발성 가능성을 없애고자 부모클래스를 상속받은 경우, 부모의 특정 메서드들을 무조건 재정의 하도록 하는 기법
자식클래스들이 재정의 해야 할 메서드를 알려줌으로써 가이드 의 역할을 할 수 있음.
추상화는 Java클래스를 작성하기 위한 설계도 를 소스코드형태로 제시하는 역할.
추상클래스
추상메서드를 포함한 클래스
// 추상 클래스의 정의 - 'abstract' 키워드 사용
public abstract class Hello {
// 추상메서드 입력 - 선언만 가능하며 구현부를 위한 블록 존재하지 않음.
public abstract void sayHello();
}
추상클래스는 객체 생성불가능, 반드시 상속을 통해서 사용된다.
공통기능과 설계지시 동시 처리
추상클래스는 생성자, 멤버변수, 일반메서드등을 포함한다.
공통기능과 가이드라인을 모두 정의하여 다른크래스에게 상속한다.
public abstract class Hello {
// 멤버변수
private String msg;
// 생성자
public Hello(String msg) {this.msg = msg;}
// getter, setter
public String getMsg() {return this.msg;}
public void setMsg(String msg) {this.msg = msg;}
// 자식들이 재정의 해야할 추상메서드를 명시
public abstract void say();
}
추상클래스 적용
public class 자식클래스 extends 추상클래스 {
public 생성자(파라미터) {
super(파라미터);
}
@Override
puvlic void 재정의메서드 {
... 메서드 재정의 ...
}
}
인터페이스
추상클래스를 상속받은 자식클래스는 부모클래스의 모든 추상 메서드를 재정의 해야한다. 하지만 어떠한 자식클래스는 상속받은 추상메서드가 불필요 한 경우가 생긴다.
이럴때 자신이 필요한 메서드만 상속받는 방법이 인터페이스 이다.
추상클래스와 인터페이스 비교
추상클래스
인터페이스
멤버변수, 생성자, 메서드, 추상메서드 포함가능
추상메서드만 포함
또 다른 클래스 상속받는것 불가능
다중 상속 가능
객체생성 불가능
객체생성 불가능
인터페이스 만들기
// 인터페이스에 추가되는 모든 메서드는 추상메서드이기 때문에 'abstract'키워드 명시 불필요
public interface Unit {
public void attack();
public void shield();
public void move();'
// ...여러 메서드...
// 인터페이스 다중상속
public class 자식클래스 implements 부모클래스1 부모클래스2 .... {
}
댓글