2014-12-07 3 views
-1

Я пытаюсь выполнить следующую программу. Я удалил последнюю часть MyRectangle2D, чтобы немного сократить ее. Когда я пытаюсь скомпилировать, я получаю 2 ошибки, я просто не могу пробиться!Невозможно скомпилировать, класс не объявлен Java

TestExample.java:17: class GeometricObject2 is public, should be declared in a file named GeometricObject2.java 
public abstract class GeometricObject2 { 

TestExample.java:11: cannot find symbol 
symbol : constructor MyRectangle2D(double,double,double,double) 
location: class MyRectangle2D 
     GeometricObject2 rectangle1 = new MyRectangle2D(1.0, 2.0, 3.0, 4.0); 

2 errors 

помощь очень ценится!

import java.util.*; 

public class TestExample 
{ 
    public static void main(String[] args) 
    { 
     GeometricObject2 rectangle1 = new MyRectangle2D(1.0, 2.0, 3.0, 4.0); 
     System.out.println(rectangle1.getArea()); 
    } 
} 


public abstract class GeometricObject2 { 
    private String color = "white"; 
    private boolean filled; 


    protected GeometricObject2() { 
    } 


    protected GeometricObject2(String color, boolean filled) { 
    this.color = color; 
    this.filled = filled; 
    } 

    public String getColor() { 
    return color; 
    } 

    public void setColor(String color) { 
    this.color = color; 
    } 

    public boolean isFilled() { 
    return filled; 
    } 

    public void setFilled(boolean filled) { 
    this.filled = filled; 
    } 

    public abstract double getArea(); 

    public abstract double getPerimeter(); 
} 



class MyRectangle2D extends GeometricObject2 { 

}

+0

Вы даже не прочитали сообщение об ошибке ... –

ответ

2

Если вы хотите реализовать все в TestExample.java файле, то я хотел бы попробовать что-то вроде этого:

import java.util.*; 

public class TestExample 
{ 
    public static void main(String[] args) 
    { 
     GeometricObject2 rectangle1 = new MyRectangle2D(2, 2, 3, 4, "Red", true); 
     System.out.println(rectangle1.getArea()); 
    } 
} 


abstract class GeometricObject2 { 
    private String color = "white"; 
    private boolean filled; 


    protected GeometricObject2() { 
    } 


    protected GeometricObject2(String color, boolean filled) { 
     this.color = color; 
     this.filled = filled; 
    } 

    public String getColor() { 
     return color; 
    } 

    public void setColor(String color) { 
     this.color = color; 
    } 

    public boolean isFilled() { 
     return filled; 
    } 

    public void setFilled(boolean filled) { 
     this.filled = filled; 
    } 

    public abstract double getArea(); 

    public abstract double getPerimeter(); 
} 



class MyRectangle2D extends GeometricObject2 
{ 
    private double x; 
    private double y; 
    private double width; 
    private double height; 

    public MyRectangle2D(double x, double y, double width, double height, 
         String color, boolean filled) { 
     super(color, filled); 
     this.x = x; 
     this.y = y; 
     this.width = width; 
     this.height = height; 
    } 

    public double getArea() { 
     return width * height; 
    } 

    public double getPerimeter() { 
     return 2 * (width + height); 
    } 
} 

И вы не опубликовали полный код MyRectangle2D класса, поэтому я действительно не знаю, как вы его намерены реализовать ...

+0

Большое спасибо за ответ! Однако компилятор все же дает мне ошибку, хотя я изменил переменные. :(любая идея почему? – Avacay

+0

Код выше компилируется для меня. Каковы сообщения об ошибках и что вы изменили? – bmk

+0

Я просто изменил переменные! точно так же, как вы. TestExample.java:11: не могу найти символ символ: конструктор MyRectangle2D (java.lang.String, булево) местоположение: класс MyRectangle2D GeometricObject2 rectangle1 = новый MyRectangle2D ("Red", правда); 1 ошибка – Avacay

1

Java требует, чтобы общественный класс под названием Foo быть определены в исходном файле с именем Foo.java - это означает, что вы не можете объявить два общественных классов в одном файле .java (с файл имеет только одно имя)

Вам нужно будет переместить определение GeometricObject2 в свой собственный файл, который будет называться GeometricObject2.java. Это должно привести вас к следующей ошибке. :)

EDIT: как отмечали другие плакаты, вы также можете сделать абстрактный класс непубличным, но это кажется мне менее полезным.

+0

Спасибо большое ! это имело значение. Я все еще странно об этом! почему это даже имеет смысл? Я думал, что компилятор по умолчанию сделал классы? – Avacay

+0

Вкратце, это связано с тем, как classloader находит класс. Если вы обратитесь к классу, он проверит ваш путь к классу, чтобы узнать, существует ли он уже. Если это не так, оно будет искать файл с правильным именем и попытаться скомпилировать его. –

+0

«Я думал, что компилятор по умолчанию сделал классы?» Компилятор только компилирует то, что ему нужно - если вы делаете публичные классы Foo, Bar и Baz, каждый в своем собственном файле, а Foo ссылается на Bar, но ни один из них не ссылается на Baz, тогда, когда вы компилируете Foo, вы обнаружите, что Bar составлен для Bar.class, но Baz нет. –

1

Если вы хотите сохранить несколько классов в одном файле, вам нужно удалить общедоступное ключевое слово. Так должно быть abstract class GeometricObject2 без публики впереди.

Ваша вторая ошибка упоминает недостающий конструктор, но для этого вам нужно будет предоставить код для класса MyRectangle2D

UPDATE

так что теперь, с классом в комментариях, ваш вопрос конструктора из-за отсутствующий конструктор, который принимает только четыре удвоения. Что бы исправить компиляции на основе кода вы добавили woulb меняется в

GeometricObject2 rectangle1 = new MyRectangle2D(1.0, 2.0, 3.0, 4.0, "Red", true);

+0

Это полоса кода для MyRectangle2D :) класс MyRectangle2D extends GeometricObject2 { private double x = 0; частный двойной y = 0; частная двойная ширина = 0; частная двойная высота = 0; MyRectangle2D() {} MyRectangle2D (двойная х, у двойного, двойная ширина, двойная высота, строка цвета, булева заполнено) { супер (цвет, заполненный); this.x = x; this.y = y; это. ширина = ширина; this.height = height; – Avacay

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