2016-06-10 5 views
0

내 수퍼 클래스에서 하위 클래스로 변수를 호출하는 행운이 없습니다. 누구든지 도와 줄 수 있습니까? 코드하지만 난 데 주요 문제에 더 많은있다수퍼 클래스에서 하위 클래스로 변수 호출

//SUPERCLASS 
public class Circle { 

    protected double radius; 
    protected double area; 

    //Some code to construct object and initialize radius 

    //Return Calculated Area 
    protected double getArea() { 
    area = Math.pow(radius, 2) * Math.PI; 
    return area; 
    } 

} 

//SUBCLASS 
public class Cone extends Circle { 

    private double height; 

//Some more code with constructors and different methods 

    public double getVolume() { 
    { 
     return (area * height/3) 
    } 
    } 

는 서브 클래스 내에는 '지역은'변수는 0.00이고 나는 '영역'에이 동일한하는 방법을 확실 해요 그 슈퍼 클래스

+2

'area'를 사용하기 전에'getArea()'를 실행해야합니다. – GAVD

답변

1

여기서 변수 영역은 인스턴스 변수이므로 기본값은 0.0d로 설정됩니다. 이 link을 참조하십시오. 면적 값을 변경하려면 getArea() 메소드를 호출하고 싶습니다. 아래 코드를 확인하십시오 :

public double getVolume() { 
     return (getArea()* height/3) 
} 
1

시도에서 계산됩니다 : 게다가

public double getVolume() { 
    return (getArea() * height/3) 
} 

가 : 원이 생성자의 반경으로 초기화 및 필드 영역을하지해야합니다, 그것은 반경에 의존하기 때문에 :

public class Circle { 

    protected final double radius; 

    public Circle(double radius) { 
    this.radius = radius 
    } 

    public double getArea() { 
    return Math.pow(radius, 2) * Math.PI; 
    } 
} 

원뿔이 원의 적절한 하위 클래스가 아니기 때문에 원뿔의 필드는 Circle baseShape이어야합니다.

0

서브 클래스에 변수를 상속하려면 protected을 사용하고 있습니다. 여기에 정답은

//SUPERCLASS 
public class Circle { 

    protected double radius; 
    protected double area; 

    //Some code to construct object and initialize radius 

    //Return Calculated Area 
    protected double getArea() { 
    area = Math.pow(radius, 2) * Math.PI; 
    return area; 
    } 

} 

//SUBCLASS 
public class Cone extends Circle { 

    private double height; 

//Some more code with constructors and different methods 

    public double getVolume() { 
    { 
     return (getArea() * height/3) 
    } 
    } 
0

값을 반경과 면적으로 설정하지 않으면 0으로 유지됩니다. 값을 설정했다고 가정합니다. 설정 값을 얻으려면 키워드를 사용해야합니다. 전체 코드를 주석으로 숨기지 않고 결함을 발견하는 것은 쉽습니다.

0

다음과 같이 수퍼 클래스와 하위 클래스의 생성자를 모두 추가하십시오.

//Super Class 
public class Circle { 

    protected double radius; 
    protected double area; 

    public Circle(double radius) { 
    this.radius = radius; 
    this.area = getArea(); 
    } 

    protected double getArea() { 
    area = Math.pow(radius, 2) * Math.PI; 
    return area; 
    } 
} 

//Sub Class 
public class Cone extends Circle { 

private double height; 

public Cone(double radius, double height) { 
    super(radius); 
    this.height = height; 
} 

public double getVolume() { 
    { 
     return (area * height/3); 
    } 
    } 
} 

는 그 후, 당신은 경우 getVolume 하위 클래스의() 방법을 사용할 수 있습니다.

public class Test { 

    public static void main(String[] args) { 
    Cone c = new Cone(3.0,5.0); 
    System.out.println(c.getVolume()); 
    } 
} 
관련 문제