2014-11-15 5 views
2

나는 추상적 인 클래스 A을 가지고 있고 그것으로부터 클래스 B이 확장되어있다.클래스가 추상 클래스에서 확장되면 private 변수에 액세스하는 방법은 무엇입니까?

public abstract class A { 
    private String name; 
    private String location; 

public A(String name,String location) { 
     this.name = name; 
     this.location = location; 
} 
public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 


    public String getLocation() { 
     return location; 
    } 

그때 나는 그것을 개인 변수를 접근하는 클래스 B의 생성자를 작성하는 방법을 이해하지 못하는 클래스 B.

public class B extends A{ 
private int fee; 
private int goals; // something unique to class B 

을 쓰고 싶어요. 나는 이것과 그와 같은 것을 썼다.

B(int fee, int goals){ 
     this.fee= fee; 
     this.goals=goals; 
    } 

간단한 설명으로 문제를 해결할 수 있습니까?

+0

오류 메시지는 문제의 원인을 설명합니다. 읽어. –

+0

그것의 잘못이 아니므로 B 클래스를 생성하기 전에 부모 클래스를 먼저 생성해야하므로 B 생성자에서 super (name, location)을 호출하여 부모를 먼저 생성해야합니다. –

+0

[부모 추상 클래스에 기본 (또는 인수 없음) 생성자가 없으므로 하위 클래스에 사용 된 생성자를 지정해야합니다.] (http://stackoverflow.com/a/260755/2830834) –

답변

5

B를 구성하여, 당신은 또한 A

예를 들어

public B(int fee, int goals) { 
    super(someName, someLocation); // this is calling A's constructor 
    this.fee= fee; 
    this.goals=goals; 
} 
을 구성 있어 한 이후, A의 생성자를 호출을 지정해야한다는 점을 제외하고는 위, 괜찮을

위의 경우 어떻게 든 A을 구성하는 방법을 결정해야합니다. A에 대해 어떤 값을 지정 하시겠습니까? 일반적으로이를 B의 생성자로 전달합니다.

public B(int fee, int goals, String name, String location) { 
    super(name, location); 
    this.fee= fee; 
    this.goals=goals; 
} 
+0

감사합니다. 브라이언 감사합니다. 이제는 이해했습니다. 지금은 잘 작동합니다. 감사합니다. 대단히 감사합니다. –

1

A 클래스의 기본 생성자가 없습니다. 즉, B 생성자에서 A 생성자에 대한 호출을 지정해야합니다.

public B(String name, String location int fee, int goals) { 
    super(name, location); // this line call the superclass constructor 
    this.fee = fee; 
    this.goals = goals; 
} 

당신은 자식 클래스에게 어머니 클래스 생성자에 암시 적 호출을 구성 할 때 클래스가 다른 상속하는 경우

도 이루어집니다. A에는 기본 생성자가 없으므로 특정 생성자를 사용하려는 것이므로 명시 적으로 호출해야합니다.

+0

대단히 감사합니다. –

관련 문제