문제

추상 클래스가 인스턴스 변수를 정의하도록하는 것이 좋습니까?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}

서브 클래스 인 externaljavaScript.class는 자동으로 소스 변수를 가져 오지만 모든 하위 클래스 자체가 상속 대신 소스를 정의하면 코드를 읽는 것이 더 쉽다고 생각합니다.

당신의 조언은 무엇입니까?

/아담

도움이 되었습니까?

해결책

변수를 추가하기 때문에 이와 같은 것이 훨씬 나을 것이라고 생각했을 것입니다. 따라서 액세스를 제한하고 깨끗하게 만드는 것이 어떻습니까? 당신의 getter/setters는 주석에서 말하는 것을해야합니다.

public abstract class ExternalScript extends Script {

private String source;

public void setSource(String file) {
    source = file;
}

public String getSource() {
    return source;
}

이것을 질문으로 다시 가져 오면, 당신은 그것을 읽을 때 getter/setter 코드가 어디에 있는지 보는 적이 있습니까? 그들이 모두 얻고 설정하는 경우 코드를 읽을 때 함수가 '수행하는 작업'에 대해 걱정할 필요가 없습니다. 생각해야 할 몇 가지 다른 이유가 있습니다.

  • 소스가 보호 된 경우 (서브 클래스로 액세스 할 수 있음) 코드는 지저분 해집니다. 누가 변수를 변경하고 있습니까? 객체 인 경우 리팩터를 리팩터해야 할 때 어려워 지지만 방법은이 단계를 더 쉽게 만드는 경향이 있습니다.
  • Getter/Setter 메소드가 얻지 못하고 설정하지 않으면 다른 것으로 설명하십시오.

수업이 실제로 다른지 아닌지를 항상 생각해보십시오. 그리고 그것은 당신이 더 필요한지 결정하는 데 도움이 될 것입니다.

다른 팁

물론 .. 왜 안돼?
초록 기본 클래스는 저장 및 유지 보수의 효율성을 위해 단일 장소의 2 개 이상의 클래스에 공통적 인 행동과 데이터에 대한 편의성 일뿐입니다. 구현 세부 사항입니다.
그러나 인터페이스를 사용해야하는 추상적 인 기본 클래스를 사용하지 않도록주의하십시오. 인용하다 인터페이스 대 기본 클래스

물론. 추상 클래스의 전체 아이디어는 모든 하위 클래스를 포함 해야하는 일부 행동이나 데이터를 포함 할 수 있다는 것입니다. Wheeled -Vehicle의 간단한 예를 생각해보십시오. Numwheels 멤버 변수가 있어야합니다. 모든 서브 클래스 에이 변수를 갖기를 원합니다. API를 확장하는 사람들이 API를 끊지 않도록 할 수 있기 때문에 Abstract 클래스는 API를 개발할 때 매우 유용한 기능이라는 것을 기억하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top