2012-04-12 2 views
0

다른 Concrete 클래스에 의해 파생 된 Abstract 클래스가 있습니다. 내 추상 클래스에서 동일한 추상 클래스의 메서드에서 호출되는 속성이 있습니다. 이 속성은 Abstract 클래스에서 비어 있지만 파생 된 값은이 클래스에 값을 설정합니다. 그럼에도 불구하고 컴파일러가 메서드를 실행하면 abstract 클래스의 변수가 사용됩니다. 파생 클래스의 Object에 대해이 메서드를 시작한다는 점을 고려하지 않습니다. null 대신에 실제 URL var를 얻으려면 어떻게해야합니까?Java 상속되는 문자열을 오버라이드

abstract public class AbstractHTTPFactory { 
    protected String URL = null; 

    final public ArrayList<? extends LGCookObject> make() throws HTTPFactoryException{ 
     try { 
      String response = sr.getData(URL); 
      } 
    } 
} 

public class RecipesHTTPFactory extends AbstractHTTPFactory{ 
    protected String URL = "VALUE"; 
} 
+0

srgetData() 란 무엇입니까? –

+0

재산 신고는 어떻게하나요? – pcalcao

+0

http://stackoverflow.com/questions/685300/is-there-a-way-to-override-class-variables-in-java –

답변

4

필드는 다형성이 아닙니다.

public abstract class AbstractHTTPFactory { 
    private final String url; 

    public final ArrayList<? extends LGCookObject> make() 
      throws HTTPFactoryException { 
     String response = sr.getData(url); 
     ... 
    } 

    protected AbstractHTTPFactory(String url) { 
     this.url = url; 
    } 
} 

public class RecipesHTTPFactory extends AbstractHTTPFactory { 
    public RecipesHTTPFactory() { 
     super("VALUE"); 
    } 
} 
0

당신이 정말로 유지하려면 : 생성자에 공급되는 AbstractHTTPFactory에서 필드를 가질 수

public abstract class AbstractHTTPFactory { 
    public final ArrayList<? extends LGCookObject> make() 
      throws HTTPFactoryException { 
     String response = sr.getData(getURL()); 
     ... 
    } 

    protected abstract String getURL(); 
} 

public class RecipesHTTPFactory extends AbstractHTTPFactory { 
    protected String getURL() { 
     return "VALUE"; 
    } 
} 

또는 잠재적 : 당신이 다형성 (polymorphic)을하려는 경우, 당신은 방법이 필요합니다 추상 기본 클래스의 URL 정의에서 기본 클래스를 숨길 수있는 동일한 이름의 변수를 다시 정의하는 대신 파생 된 구체적인 클래스에서 값을 설정하십시오. 파생 된 클래스에 신비한 변수가 나타날 것이므로 좋은 방법은 아닙니다.

관련 문제