Мой супер класс называется многоугольник:Использование классов с наследованием в главном классе Java
public class Polygon
{
private double area;
/**
* Constructor for objects of class Rectangle
*/
public Polygon(double area)
{
this.area = area;
}
/**
* Mutator method that sets the area
*/
public void setArea(double area)
{
this.area = area;
}
/**
* Accessor method that returns the area
*/
public double getArea()
{
return area;
}
}
Мой Квадратный класс, который расширяет Polgyon:
public class Square extends Polygon
{
private double perimeter;
/**
* Constructor for objects of class Square
*/
public Square(double area)
{
super(area);
}
/**
* calculates the perimeter of the square using area inherited from Polygon
*/
public void calcPerimeter()
{
perimeter = Math.sqrt(getArea()) * 4; //in a square, area is the square root
}
/**
* Accessor method that returns the perimeter
*/
public double getPerimeter()
{
calcPerimeter();
return perimeter;
}
}
У меня есть круг и класс прямоугольник почти то же самое кроме длины, ширины и окружности.
В основном классе я хочу разрешить пользователю вставлять в область, а затем получать периметр квадрата с этой областью, окружность круга с этой областью и т. Д. Я не знаю, сделал ли я это правильно, хотя ... Я создал каждый объект и вставил один и тот же ввод. Вот мой основной класс:
public class PolygonMain
{
public static void main(String[] args)
{
double input = Double.parseDouble(args[0]);
Polygon polygon = new Polygon(input);
Square square = new Square(input);
Circle circle = new Circle(input);
Rectangle rectangle = new Rectangle(input);
System.out.println("Area:" + " " + polygon.getArea() + ".");
System.out.println("Perimeter:" + " " + square.getPerimeter() + ".");
System.out.println("Circumference:" + " " + circle.getCircumference() + ".");
System.out.println("Length:" + " " + rectangle.getLength() + ".");
System.out.println("Width:" + " " + rectangle.getWidth() + ".");
}
}
Как вы можете увидеть в моем главном классе, я поставил на входе пользователя (арг [0]) в параметр каждого конструктора ..... какой вид делает наследование часть конструкторов, т. е. супер (площадь) .... бесполезная. Нужно ли создавать каждую новую форму? Кроме того, что, если я должен был внедрить класс Scanner в основной класс? Предположим, пользователь может ввести значения области и вернуть информацию о подклассах, а затем сделать это с несколькими значениями области? Как бы я это сделал, поскольку я понятия не имею, как создавать объекты в основном классе. Мы только начали использовать метод Main; наша среда IDE для класса BlueJ, которая не требует этого. Надеюсь, мой вопрос не слишком запутан с формулировкой, и я извиняюсь, если я отформатировал это сообщение неправильно, так как это мой первый пост. Спасибо.
PS: Я забыл упомянуть, что этот квадрат является прямоугольником. Мой профессор допустил ошибку и случайно поручил нам протянуть прямоугольник с квадрата.
PS: Кроме того, в основном классе, где вы, ребята, предложили добавить в коллекцию каждую другую фигуру, а затем повторить каждую и распечатать атрибуты, есть ли у вас другие альтернативы? Как я могу сделать это с помощью класса Scanner? Потому что в приведенной выше ситуации я создаю все объекты. Я стараюсь как можно больше тренироваться с основным классом, потому что я сильно не хватает в нем из-за BlueJ.
Если Цель лаборатории - продемонстрировать полиморфизм, вы, вероятно, хотите создать метод getArea() для каждого типа многоугольника и вызвать это в цикле. Я отвечу, чтобы дать вам представление. – bblincoe
Поскольку ваш класс 'Square' наследуется от' Polygon', вы должны использовать методы периметра до класса «Polygon». Фактически, квадрат также является прямоугольником. – Brian
... а затем 'getPerimeter()' будет находиться в 'Polygon', тогда как каждый конкретный тип (т. Е. Каждый производный класс)' Polygon' переопределит 'calculatePerimeter()'. – CompuChip