Я новичок в java, и во время кодирования я столкнулся с проблемой, которую мне непросто понять. Мой вопрос: «Напишите класс с методом определения площади прямоугольника. Создайте подкласс, чтобы найти объем прямоугольной формы». Ошибка, с которой я столкнулся, приведена ниже. Я написал этот код для того же: -
class Rectangle
{
public int w;
public int h;
public Rectangle(int width, int height)
{
w=width;
h=height;
}
public void area()
{
int area=w*h;
System.out.println("Area of Rectangle : "+area);
}
}
class RectangleBox extends Rectangle
{
int d;
public RectangleBox(int width, int height, int depth)
{
d=depth;
w=width;
h=height;
}
public void volume()
{
int volume=w*h*d;
System.out.println("Volume of Rectangle : "+volume);
}
}
class programm8
{
public static void main(String args[])
{
Rectangle r = new Rectangle(10,20);
RectangleBox rb = new RectangleBox(4,5,6);
r.area();
rb.volume();
}
}
Error:(23, 5) java: constructor Rectangle in class code.Rectangle cannot be applied to given types; required: int,int found: no arguments reason: actual and formal argument lists differ in length




Вам нужно сначала вызвать конструктор суперкласса:
class RectangleBox extends Rectangle
{
int d;
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
}
public void volume()
{
int volume=w*h*d;
System.out.println("Volume of Rectangle : "+volume);
}
}
собственно, это называется, вот в чем проблема. вы можете перефразировать свой ответ на «сначала нужно вызвать правильный конструктор вашего суперкласса»
Спасибо, сэр, что потратили свое драгоценное время, чтобы ответить на мой вопрос. :)
public RectangleBox(int width, int height, int depth)
{
d=depth;
w=width;
h=height;
}
Самое первое, что делает этот конструктор, - это вызывает конструктор родительского класса с теми же параметрами (если вы специально не укажете конструктору вызвать другой), что будет:
public Rectangle(int width, int height, int depth)
{
w=width;
h=height;
}
Этот конструктор не существует. Вам нужно будет вручную вызвать родительский конструктор с соответствующими параметрами, например:
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
}
Спасибо, сэр, что потратили свое драгоценное время, чтобы ответить на мой вопрос. :)
Когда вы сначала создаете дочерний объект, работает родительский конструктор. В этом примере, когда вы создаете объект RectangleBox, сначала работает конструктор Rectangle, после чего работает конструктор RectangleBox. Итак, ваш дочерний конструктор должен вызвать родительский конструктор.
Обычно, если у вас есть конструкторы по умолчанию для родительского и дочернего классов, дочерний конструктор по умолчанию вызывает родительский конструктор по умолчанию. Но у вас нет конструкторов по умолчанию, потому что этот конструктор RectangleBox должен вызывать конструктор Rectangle. А для вызова родительского конструктора необходимо использовать ключевое слово super.
А затем ваш код:
public Rectangle(int width, int height)
{
w=width;
h=height;
}
public RectangleBox(int width, int height, int depth)
{
super(width, width)
h=height;
}
Спасибо, сэр, что потратили свое драгоценное время, чтобы ответить на мой вопрос. :)
Ваша ошибка связана с темой; Вызов конструктора суперкласса
Вы можете выполнить поиск по этому заголовку для получения подробной информации.
Если класс наследует какие-либо свойства от другого класса, подкласс должен вызвать конструктор своего родительского класса. Если конструктор родительского класса не имеет аргументов, java вызывает его сам по себе, вам не нужно ничего делать. Но в вашем случае класс Rectangle имеет конструктор с аргументами «ширина» и «высота». Поэтому, когда вы пишете конструктор для подкласса, первое, что вам нужно сделать, это вызвать родительский класс '. Если вы хотите вызвать параметризованный конструктор суперкласса, вам нужно использовать ключевое слово super, как показано ниже.
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
w=width;
h=height;
}
Спасибо, сэр, что потратили свое драгоценное время, чтобы ответить на мой вопрос. :)
Спасибо всем, кто вложил свое драгоценное время, чтобы ответить на мой вопрос. Большое спасибо, ребята .. :)