2016-04-19 4 views
3

Hier sind meine Fragen:Wie Bereich der Kinderklasse zu berechnen, die von übergeordneter Klasse

  1. Wenn ich die Flächiger Druck bin beiden Formen, erhalte ich den richtigen Bereich für die Ellipse, aber 0 für die Kreise. Warum?

  2. Ich habe mehrere Radien des Kreises. Wie kann ich den Bereich, der durch den vorherigen Radius berechnet wurde, weiter hinzufügen? Kurz gesagt, ich muss die Fläche aller Radien summieren.

  3. Immer wenn ich den Radius des Kreises passiere, muss auch der Kreisbereich (berechnet durch den Radius) zum Ellipsenbereich hinzugefügt werden. Wie geht das?

Dies ist mein aktueller Code:

public class Ellipse { 
    private double area; 
    private double axis1; 
    private double axis2; 

    public Ellipse() { 
     area = 0; 
    } 

    public Ellipse (double axis1, double axis2) { 
     this.axis1 = axis1; 
     this.axis2 = axis2; 
    } 

    public void calculateArea() { 
     area += axis1 * axis2; 
    } 

    public double getArea() { 
     return area; 
    } 
} 

public class Circle extends Ellipse { 
    private double radius; 
    private double area; 

    public Circle(){ 
     area = 0; 
    } 

    public Circle(double radius) { 
     super(radius, radius); 
    } 

    public double getArea() { 
     return area; 
    } 
} 

public class Driver { 
    public static void main (String args[]) { 
     Ellipse ellipse = new Ellipse(10, 20); 
     ellipse.calculateArea(); 
     Circle circle = new Circle(50); 
     circle.calculateArea(); 
     System.out.println("Area of Circle is : " + ellipse.getArea()); 
     System.out.println("Area of Circle is : " + circle.getArea()); 
    } 
} 

Antwort

0

In Ihrer getArea() Methode unter der Klasse Circle Sie den Wert der area unter Circle zurückkehren.

Allerdings berechnen Sie das Ergebnis in Ihrer area Variable unter der Ellipse Klasse.

tun: ändern

private double area; 

zu

protected double area; 

und in Ihrem getArea() Methode unter Circle Klasse:

public double getArea(){ 
    return super.area; 
} 

Hoffnung, das hilft.

0

1) Wenn ich den Bereich der beiden Formen drucke, bekomme ich den richtigen Ellipsenbereich, aber ich bekomme den Bereich des Kreises als Null. Warum?

Dies liegt daran, wie Debanic Staaten als auch, können Sie den Zugriffsmodifikator von Ellipse als private erklärt. Wenn Sie also Inheriting sind, wird die private Variable area nicht von der Derived Klasse Circle vererbt. Was passiert hier?

Ihre Circle.getArea() gibt Ihre Circle Klasse area Variable zurück. Welches ist 0. Also besser deklarieren Sie Ellipse Klasse area Instanzvariable wie protected. Und rufen Sie super.getArea() aus der Circle Klasse. Wie die obige Antwort sagt. Sie können auch keinen Zugriffsmodifikator setzen, aber es wäre ein Problem, wenn Ihre Unterklasse in einem anderen Paket wäre.

2) Ich habe mehrere Radius des Kreises. Wie kann ich den Bereich, der durch den vorherigen Radius berechnet wurde, weiter hinzufügen (Kurz gesagt, ich muss die Fläche aller Radien summieren) .3) Immer wenn ich den Kreisradius überschreite, brauche ich auch den Kreisbereich (berechnet durch den Radius) sollte auch zum Ellipsenbereich hinzugefügt werden.

Ich werde dir nicht den ganzen Code schreiben, aber gebe einen Hinweis, der dir helfen wird. Also, Sie möchten weiter die area wie von der radius von Circle oder axis1,axis2 von Ellipse zu einem einzigen area berechnet hinzufügen.

In Ihrem Code, der Hinderung, die von der Erreichung Ihrer Ziele (Hinzufügen von Bereichen zu einzelnen Bereich jedes Mal) verursacht wird, ist in der Tatsache, dass

Jedes Mal, wenn Sie einen Anruf an den Konstruktor machen mit new Stichwort Sie erstellen im Grunde ein ganz neues Objekt, so dass der Wert des Bereichs reset wird.

Sie möchten Ihre area Variable gemeinsam sein ( gemeinsam) auf alle Objekte. Sie können dies tun, indem Sie es als static variable deklarieren. Dann wird der Wert von area immer aktualisiert, wenn Sie daran arbeiten!

Verwandte Themen