2016-04-19 3 views
3

Вот мои вопросы:Как рассчитать площадь дочернего класса от родительского класса

  1. Когда я печать области оба форм, я получаю правильную области для эллипса, но 0 для круги. Зачем?

  2. У меня есть несколько радиусов круга. Как я могу продолжать добавлять его в область, которая была рассчитана предыдущим радиусом? Короче говоря, мне нужно суммировать площадь всех радиусов.

  3. Всякий раз, когда я передаю радиус круга, мне также необходимо, чтобы область круга (вычисленная радиусом) также добавлялась к области эллипса. Как это сделать?

Это мой текущий код:

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()); 
    } 
} 

ответ

0

В вашем методе getArea() под классом Circle вы возвращающее значение area под Circle.

Однако, вы рассчитываете результат в своей переменной area под классом Ellipse.

ли это: Изменить

private double area; 

в

protected double area; 

и в методе getArea() под Circle класса:

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

Надеется, что это помогает.

0

1) Когда я печатаю область обеих фигур, я получаю правильную область эллипса, но я получаю область круга как ноль. Зачем?

Это происходит потому, что, как Debanic государства, а также, вы объявили Модификатор ACCESS из Ellipse в private. Поэтому, когда вы находитесь Inheriting, private переменная area не наследуется Derived класс Circle. Так что здесь происходит?

Ваш Circle.getArea() возвращает ваш Circle класс area переменная. Что равно 0. Так что лучше объявите Ellipse класс area переменная экземпляра как protected. И позвоните super.getArea() из класса Circle. Как сказано выше. Вы можете поставить без модификатора доступа, но это было бы проблемой, если ваш подкласс находился в другом пакете.

2) У меня есть несколько радиусов круга. Как я могу продолжать добавлять к нему область, которая была рассчитана предыдущим радиусом (Короче говоря, мне нужно суммировать площадь всех радиусов) .3) Всякий раз, когда я пропускаю радиус круга, мне также нужно, чтобы область круга (вычисленный радиусом) также следует добавить в область эллипса.

Я не собираюсь писать вам весь код, но дайте подсказку, которая поможет вам. Таким образом, вы хотите продолжить добавление area, вычисленное radius круга или axis1,axis2 от Ellipse до одного area.

В вашем коде препятствие, что причиняется от достижения своей цели (добавление областей в одной области каждый раз) заключается в том, что

Каждый раз, когда вы делаете вызов конструктору, используя new ключевое слово Вы в основном создаете совершенно новый объект, чтобы в какой-то мере значение области получало reset.

Вы хотите, чтобы ваша area переменная является общим (совместно) ко всем объектам. Вы можете сделать это, объявив его static variable. Тогда значение area будет постоянно обновляться каждый раз, когда вы на нем работаете!

Смежные вопросы