구체적인 방법을 재정의하는 것이 코드 냄새라는 것이 사실입니까? 구체적인 방법을 재정의해야한다고 생각하기 때문에 :
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
그것은 다음과 같이 다시 쓸 수 있습니다
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
B가 A에서 a ()를 재사용하려면 다음과 같이 다시 작성할 수 있습니다.
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
메소드를 재정의하기 위해 상속이 필요하지 않은 것은 사실입니까?
virtual
재정의를 지원하기 위해 키워드를 사용해야합니다 . 따라서 언어의 특성에 따라 문제가 모호해집니다.
final
이러한 상황 에서 수정자가 정확하게 존재하는 것처럼 느낍니다 . 메소드의 작동이 대체되도록 설계되지 않은 경우로 표시하십시오 final
. 그렇지 않으면 개발자가이를 재정의하도록 선택할 수 있습니다.