2013-03-10 5 views
1

기본 클래스와 하위 클래스가 있습니다. 기본 클래스는 일반적인 메소드와 서브 클래스에서 사용하고자하는 구현을 가지고 있지만 슈퍼 클래스 대신 하위 클래스 멤버 변수를 사용하려고합니다. 하위 클래스에서 같은 메서드를 다시 작성하고 싶지 않습니다. 이를 달성하기위한 Java의 방법이 있습니까?수퍼 클래스 메소드에서 subclass 멤버 변수를 사용합니까?

+0

당신은 필드를 무시할 수는 없지만 getter 메소드를 오버라이드 (override) 등 수 하나의 가능한 해결책은 필드를 가져 오기 위해 * getter * 메서드를 사용하는 것입니다. –

+1

달성하고자하는 것에 대해 좀 더 구체적으로 설명해 주시겠습니까? 나는 추상적 인 수업이 당신이 찾고있는 것이라고 상상할 수 있습니다. – Trinimon

답변

0

메서드를 사용하여 멤버에 액세스하고 하위 클래스에서이를 재정의 할 수 있습니다.

Class A{ 
    public void DoStuff(){ 
    int aux = getResource; 
    /*cool things with aux*/ 
    } 
    protected int getResource(){ 
    return internal_member; 
    } 
    private int internal_member; 
} 

Class B extends A{ 
    private int another_member; 
    @Override 
    public int getResource(){ 
    return another_member; 
    } 

} 

그러나 이것은 직접 멤버를 사용하는 클래스 A 들어간 상태 명을 방지하지 않습니다 고려, 회원들과 게터에 대한 기본 클래스를 작성하는 편이 더 낳습니다. 당신이 필요로하는 경우

Class A{ 
    public void DoStuff(){ 
    /*cool things with internal_member*/ 
    } 
    protected List internal_member; 
    A(){internal_member = /*Set here a value*/} 
} 

Class B extends A{ 
    B(){internal_member = /*Set a different value here! you can even declare a member and assign it here*/} 

} 

당신은 인수 생성자를 사용할 수 있습니다 전에 설명 어떤 사람들은 보호로 기본 클래스의 데이터 멤버를 가지고 서브 클래스에서 초기화하는 것입니다으로

또 다른 옵션.

+0

이상한 Java 코드입니다. 그것은 나에게 거의 C++처럼 보입니다. –

+0

@HovercraftFullOfEels 감사합니다! 나는 C++로 하루 종일 있었고 대답을 쓸 때 나는 그것을 빨리했고 깨닫지 못했습니다! lol –

+0

다음과 같은 것이 있습니다 : public class Base { List A; 베이스()는 공용 doSomethingOnList() {} } 공개 아이베이스 { @Override 리스트 B를 확장 { 대단해는 가 =}; 자식() { super(); this.B = B } } 기본 클래스에 정의 된 doSomethingOnList() 메소드가 List A 대신 Child 클래스 List B를 사용하도록하고 싶습니다. 하위 클래스에 같은 메소드를 쓰고 싶지 않습니다. 상속은 그것을 처리합니까? 아니면 세터를 써야합니까? – user2154810

0

는 그런 다음 서브 클래스의 생성자에서 슈퍼의 변수의 값을 대체 멤버 변수 &에 protected 세터를 만들 수 있습니다

class Animal { 
    private String voice = "Oooo"; 

    protected void setVoice(String voice) { 
     this.voice = voice; 
    } 

    public void speak() { 
     System.out.println(this.voice); 
    } 

} 

class Dog extends Animal { 

    public Dog() { 
     setVoice("woof"); 
    } 

} 
+0

여러분 모두 감사합니다 !!! 위의 토론은 많은 도움이되었습니다. – user2154810

관련 문제