Estou fazendo uns testes desenvolvendo pequenos programas em java. Um deles apresentou o seguinte fato: a compilação segue normalmente sem nenhum erro, gerando várias classes (um programa gera vários arquivos com extensão .class), e então, quando digito a linha mandando a execução do programa ocorre um erro dizendo que uma classe do programa tem que ter a função main, mas esta classe não deveria ter esta função pois main é de outra classe. É um programa para demonstrar herança, sobreposição de método e polimorfismo.
O programa se chama TwoDShape.java e gera os arquivos .class seguintes: 1) DynShapes.class, 2) Rectangle.class, 3) Triangle.class e 4) TwoDShape.class
A classe que apresenta o erro durante a tentativa de execução do código compilado é TwoDShape e o erro é o seguinte: Erro: o método main não foi encontrado na classe TwoDShape; defina o método main como: public static void main(String args[ ]) ou uma classe de aplicativo JavaFX deve expandir javafx.application.Application
Porque a máquina virtual java pede a inclusão de uma main onde não deve ter uma main? Abaixo tem a imagem da linha de comando que compila, da linha de comando que tenta executar o programa, e do erro que o comando produz. Veja:
Pensei que pudesse ser falta de algum parâmetro na compilação ou execução. As linhas da imagem da janela de execução acima estão corretas? Quem souber o que está errado, favor me mandar uma mensagem. Abaixo vou colocar a listagem do programa…
Obrigado,
anyblueangel3
// Usa o despacho dinâmico de métodos.
class TwoDShape {
private double width;
private double height;
private String name;
// Construtor padrão.
TwoDShape() {
width = height = 0.0;
name = "none";
}
// Construtor parametrizado.
TwoDShape(double w, double h, String n) {
width = w;
height = h;
name = n;
}
// Constrói objeto com largura e altura iguais.
TwoDShape(double x, String n) {
width = height = x;
name = n;
}
// Constrói objeto a partir de outro.
TwoDShape(TwoDShape ob) {
width = ob.width;
height = ob.height;
name = ob.name;
}
//Métodos acessadores para width e height.
double getWidth() { return width; }
double getHeight() { return height; }
void setWidth(double w) { width = w; }
void setHeight(double h) {height = h; }
String getName() { return name; }
void showDim() {
System.out.println ("Width and Height are " + width + " and " + height);
}
double area() {
System.out.println("area() mest be overridden");
return 0.0;
}
}
//Subclasse de TwoDShape para triângulos.
class Triangle extends TwoDShape {
private String style;
//Construtor padrão.
Triangle() {
super();
style = "none";
}
//Construtor para Triangle.
Triangle(String s, double w, double h) {
super(w, h, "triangle");
style = s;
}
// Construtor com um argumento.
Triangle(double x) {
super(x, "triangle"); // chama construtor da superclasse
style = "filled";
}
//Constrói um objeto a partir de outro.
Triangle(Triangle ob) {
super(ob); // passa objeto para construtor de TwoDShape
style = ob.style;
}
//Sobrepõe area() para Triangle.
double area() {
return getWidth() * getHeight() / 2;
}
void showStyle() {
System.out.println("Triangle is " + style);
}
}
// Subclasse de TwoDShape para retângulos.
class Rectangle extends TwoDShape {
// Construtor padrão.
Rectangle() {
super();
}
// Construtor para Rectangle.
Rectangle(double w, double h) {
super (w, h, "rectangle"); // chama construtor da superclasse
}
// Constrói um quadrado.
Rectangle (double x) {
super(x, "rectangle"); // chama construtor da superclasse
}
// Constrói um objeto a partir de outro.
Rectangle(Rectangle ob) {
super(ob); // passa objeto para constructor de TwoDShape
}
boolean isSquare() {
if(getWidth() == getHeight()) return true;
return false;
}
// Sobrepõe area() para Rectangle.
double area() {
return getWidth() * getHeight();
}
}
class DynShapes {
public static void main(String args[]) {
TwoDShape shapes[] = new TwoDShape[5];
shapes[0] = new Triangle("outlined", 8.0, 12.0);
shapes[1] = new Rectangle(10);
shapes[2] = new Rectangle(10, 4);
shapes[3] = new Triangle(7.0);
shapes[4] = new TwoDShape(10, 20, "generic");
for(int i = 0; i < shapes.length; i++) {
System.out.println("Object is " + shapes[i].getName());
System.out.println("Area is " + shapes[i].area());
System.out.println();
}
}
}