2012-05-10 4 views
1

나는 멍청하니 도움이 필요하다.오버라이드 된 메소드를 사용하는 자바

그래서이 추상 클래스에는 전용 변수가 있습니다. 또한 getThing()이라는 메서드를 반환합니다.

나는 그 추상 클래스를 확장하는 클래스를 가지고 있으며, 또한 private 변수와 추상 클래스에서 값을 얻기 위해 원본을 오버라이드하는 메소드를 가지고있다.

두 값에 모두 액세스 할 수있는 유일한 방법은 getSuperThing이라는 하위 클래스에 두 번째 메서드를 만들고 그 안에 super를 사용하는 것입니다. 글쎄, 호기심이 생기고, objectNae.super.getThing()과 같은 일을함으로써 추상적 인 클래스 메소드에 접근 할 수있는 좀 더 쉬운 방법이 있는지 궁금했다.

덕분에)

+0

우편 번호 – andersoj

답변

3

변수는 private하고 그래서에만 포함 (추상) 클래스에서 참조 할 수 있습니다. 앞서 말했듯이, 서브 클래스에서 오버라이드 된 메소드가 아닌 슈퍼 클래스 메소드를 호출 할 수 있습니다.

변수를 접근 자 메서드가 필요없이 직접 하위 클래스에서 액세스 가능하게하려면 protected으로 변경하십시오. 다음은 에 대한 설명서입니다.

+0

고마워요, 아직 보호에 대해 몰랐습니다. –

1

질문을 올바르게 이해하면 구체적인 하위 클래스의 추상 클래스 메소드를 무시하면 안됩니다. 서브 클래스가 추상 클래스에 의해 반환 된 값과 다른 값을 반환해야하는 경우가 아니면 필요하지 않습니다. 잘못된 디자인을 제안합니다.

대신 추상 클래스의 메서드는 하위 클래스의 메서드로 액세스 할 수 있습니다. 당신이있는 경우

그래서 :

new ConcreteClass().getValue() 
0

난 당신이에) (super.getThing를 호출하는 것보다 다른 방법을 생각하지 않는다 :

public abstract class AbstractClass { 
    private int value = 3; 

    public int getValue() { 
    return value; 
    } 
} 

public class ConcreteClass extends AbstractClass { 
} 

을 당신은 할 수 있어야 서브 클래스의 getThing() 또는 getSuperThing() 메소드 추상 클래스는 사용하기 전에 서브 클래 싱되어야합니다.

관련 문제