2014-10-13 3 views
1

나는 상속에 약간의 문제가있다. 하위 클래스의 일부 속성이 동일하기 때문에 내가 한 것은 수퍼 클래스로 만들어졌습니다. 내가 슈퍼 클래스를 참조하려고자바 서브 클래스를 호출하는 슈퍼 클래스

, 나는 나는 그것이 private 필드에 액세스 할 것이다 그러나 어떻게 하위 클래스에서 상위 클래스에서 이름을 얻을 수 있다는 사실을 알고는 name has private access in the Superclass 'person'. 말을 컴파일되지 않습니다 라인 name = replacementName; 위에 super(name);을 퍼팅 시도 방법?

다음은이 방법입니다.

public void changeName(String replacementName){ 
    name = replacementName; 
} 

감사합니다. 당신의 슈퍼 클래스에 이름 속성에 개인 선언을 사용하여 공공 (또는 보호)의 getter/setter를 추가 -

1 :

+3

이 코드가 제공하는 전체 클래스를 제공 할 수 있습니까? 귀하의 질문 자체가 당신이 달성하고자하는 것을 명확하게 설명하지는 않습니다. – MrHug

+0

우리는 수퍼 클래스 필드 선언을 볼 필요가있을 것입니다.하지만 문제가 무엇인지 알 것 같습니다. 그냥 확인해야합니다! – Compass

+1

슈퍼 클래스의'name'이 private이고 setter가 없다면 많은 규칙을 위반하지 않고 실제로 그렇게 할 수있는 방법이 없습니다. – Churk

답변

1

당신은 몇 가지 옵션이 있습니다. 그런 다음 setter 메소드를 사용하여 하위 클래스에서 수퍼 클래스 필드를 수정할 수 있습니다.

2 - 수퍼 클래스에서 이름 필드에 보호 선언을 사용합니다. 그런 다음 하위 클래스에서 직접 액세스 할 수 있습니다.

...

+1

수퍼 클래스에 액세스 할 수 있다고 가정합니다. 좋은 일이 아니라고 가정합니다. – Churk

+0

나는 그가 슈퍼 클래스와 아이 클래스를 함께 만들었다는 것을 읽었으므로 접근 할 수 있다고 생각했다. – uncleBounty

+0

그는 말하지 않았다. 그는 동일한 속성을 가진 수퍼 클래스를 만들었고 액세스 할 수있는 슈퍼 클래스를 만들었다. 그리고 하위 클래스를 만들었 기 때문에 그 자체가 잘못되어 있습니다. 수퍼 클래스에서 하위 클래스로 수퍼 클래스를 만들 수 없으므로 super()를 시도하십시오. – Churk

관련 문제