2013-02-22 2 views
15

Android에서 개발 중이며 가능한 가장 좋은 방법으로 구현하려고하는 비교적 간단한 상황이 있습니다.Java에서 변수를 설정하도록 하위 클래스를 설정하십시오.

단순히 화면의 기본 매개 변수를 모두 정의하는 클래스가 있습니다. 여기에서 애플리케이션의 모든 화면은이 하위 클래스입니다. 각 화면마다 (즉 하위 클래스) 이 필요합니다. 구현시 변수의 값을 설정해야합니다. 즉, 각 화면은 탐색 트리에서 어떤 수준인지 정의해야합니다.

또한이 변수는 하위 클래스에 설정되어있을 때 final이어야합니다 (실제로는 가능하지 않음).

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? Java에서 이러한 유형의 동작을 올바르게 시행 할 수있는 방법이 있습니까?

+3

이것은 변수와 함께 할 수 없습니다. 그러나 추상 클래스는 특정 메서드가 구현되도록 요구할 수 있습니다.이 메서드는 해당 값을 반환 할 수 있습니다. –

+0

감사! 나는 그 경로를 내려가려고 시도 했었고 어떻게 추상 함수를 호출해야하는지에 매달렸다. 공백이 있고 인자없는 생성자를 잊어 버렸고 추상 생성자와 같은 것을 시도하고있었습니다. –

답변

27

@ pst 님의 의견은이 해결책으로 이어졌습니다.

이것은 변수로 수행 할 수 없습니다. 그러나 추상 클래스는 특정 방법을 구현하도록 요구할 수 있습니다 :이 방법은 설정하거나 변수를 반환하는 abstract 기능을 선언에서 해당 값

를 반환 할 수, 당신은 제대로 구현하는 서브 클래스를 강제 할 수 있습니다.

다음으로 함수는 외부 클래스의 모든 단일 하위 클래스에 의해 호출되어야합니다. 이는 외부 클래스의 어딘가에서 수행되어야 함을 의미합니다.

참고 :이 서브 클래스 super 호출에 대해 걱정할 필요없이 외부 클래스의 인수 없음의 생성자에서 수행 할 수있는 생성자는 명시 적으로 슈퍼 클래스 생성자를 호출하지 않는 경우, 자바 컴파일러는 자동으로 전화를 삽입 슈퍼 클래스의 인자없는 생성자. 수퍼 클래스에 인수가없는 생성자가 없으면 컴파일 타임 오류가 발생합니다. Object에는 이러한 생성자가 있으므로 Object가 유일한 수퍼 클래스 인 경우 아무 문제가 없습니다.그 기준

(Java docs: Super)

,이 용액을 잡아되며 올바르게 변수는만큼 설정할 수 중 하나

  1. 다른 생성자 (수퍼에 따라서 슈퍼 수 생성되지
  2. 슈퍼 클래스의 다른 모든 생성자는 여전히 기본 생성자를 내부적으로 호출합니다.

코드 :

슈퍼 클래스 :

public abstract class SuperClass { 
    // Variable all inner classes must set 
    static int myVar = 0; 

    public SuperClass() { 
     myVar = giveValue(); 
    } 

    public abstract int giveValue(); 
} 

서브 클래스 :

public class SubClass extends SuperClass { 

    @Override 
    public int giveValue() { 
     return 5; // individual value for the subclass 
    } 

} 
+1

고마워요! 나의 날을 구했다! – DevAndroid

8

자식 클래스가 필드를 초기화하도록 강요하는 대신 클래스의 생성자가 초기화하려는 필드를 제공하는 인터페이스를 구현하는 매개 변수를 사용하여 작성 전략을 따를 수 있습니다.

관련 문제