[Ajuda] Interacção entre Classes - Java

metRo_

Power Member
Olá,
Estou a usar o NetBeans IDE.

Criei o seguinte:

1 - "Java Class Lybrary" com o nome Figure e tem o seguinte código:

Código:
public class Figure {
    int area = 0;
    public int getArea(){
        return(area);
    }
}
2 - "Java Class Lybrary" com o nome Square e tem o seguinte código:

Código:
public class Square {
    int side = 0;
    public int getSide(){
        return(side);
    }
    public void setSide(int value){
        side = value;
        area = side * side;
    }
}
3 - "Java Application" com o nome SquareInfo e tem o seguinte código:
Código:
package squareinfo;

/**
 *
 * @author Zé
 */
public class SquareInfo {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Square sq = new Square();
        sq.setSide(250);
        System.out.println("Side of square: "+ sq.getSide());
        System.out.println("Area of square: "+ sq.getArea());
        Square sq2 = new Square();
        sq2.setSide(17);
        System.out.println("Side of square: "+ sq.getSide());
        System.out.println("Area of square: "+ sq.getArea());
    }

}
Logo no ponto 2 dá erro porque a variável área esta na outra classe e eu suponho que ele não a está a encontrar. No projecto Square fui a libraries e fiz adicionar projecto e adicionei o projecto Figure às libraries do Square mas continua com o mesmo erro.
No ponto 3 o erro é igual em relação aos métodos das duas classes.

EDIT: Isto é de um exemplo.
 
Última edição:
Dá erro e tá correcto. Não podes aceder à variável area a partir da classe Square, desta forma. Pelo código parece-me um exemplo de herança, mas tu não estás a usar herança. Isto é, a classe Square deveria ser uma subclasse da classe Figure, e dessa forma, e com os construtores definidos, poderias fazer isso, mas só nesse caso. Dá uma vista de olhos nisto: Java Subclasses
 
Eu uso o Eclipse para programar em Java e de lado tens os projectos, e dentro do projectos tens os pacotes.
Para aceder à classes de diferentes pacotes, tenho de fazer import.pacote2 ( exemplo ).

EDIT: tendo em conta a resposta do addicted, programação correcta era usares herança. ( x2 )
 
Última edição:
Código:
public class Figure {
    private int area = 0;
    public int getArea(){
        return(area);
    }
   public void setArea(int area)
   {
       this.area=area;
   }
}
Código:
import Figure.*;

public class Square extends Figure{
    int side = 0;
    public int getSide(){
        return(side);
    }
    public void setSide(int value){
        side = value;
        setArea(side*side);
    }
}
Código:
public static void main(String[] args) {
        Square sq = new Square();
        sq.setSide(250);
        System.out.println("Side of square: "+ sq.getSide());
        System.out.println("Area of square: "+ sq.getArea());
        Square sq2 = new Square();
        sq2.setSide(17);
        System.out.println("Side of square: "+ [B]sq2[/B].getSide());
        System.out.println("Area of square: "+ [B]sq2[/B].getArea());
    }
 
Está aqui um printscreen para ajudar.



Outra coisa neste tutorial para ligar uma classe a um projecto http://www.netbeans.org/kb/docs/java/javase-intro.html a certa altura ele diz para colocar "type org.me.mylib in the Package field" e eu na altura quando fiz o tutorial até vim aqui ao forum perguntar e até percebia alguma coisa simplesmente agora ao fazer o meu como não sabia o que colocar não coloquei nada.
 
Última edição:
Código:
import Figure.*;

public class Square extends Figure{
    int side = 0;
    public int getSide(){
        return(side);
    }
    public void setSide(int value){
        side = value;
        setArea(side*side);
    }
}

Erro sobre a primeira linha -> "Package Figure does not exist"
 
Erro sobre a primeira linha -> "Package Figure does not exist"

Fiz o exemplo no netbeans.
Isso depende do nome que tu deste quando criaste o projecto Figure.
No netbeans tens Projecto->package->nomedaclasse;

tens de fazer import package.nomedaclasse ou * para fazer import de todas as classes
 
Antes demais não sei porque usaste as "Java Class Library" ... confesso que nunca as utilizei, e para este exercicio não precisas delas. Depois, deves utilizar uma herança, como já foi dito anteriormente. Dá para afzer o pretendido sem herança, mas com ela além do programa ter mais lógica, ficas com tudo mais facilitado.

Resolvi o teu problema e aqui fica a solução ... só antes fica aqui uma breve explicação de como organizei isto. Crias uma "Java Application", e metes como class main a tua 3ª ("SquareInfo"). Depois adicionas duas "Java Class" com os nomes das outras duas.

Aplica este código de seguida:

Figure.java
Código:
public class Figure {
    int area = 0;
 
    public int getArea(){
        return(area);
    }
 
    public void setArea(int area){
        this.area = area;
    }
}

Square.java
Código:
public class Square extends Figure{
    int lado = 0;
 
    public int getLado(){
        return(lado);
    }
 
    public void setLado(int lado){
        this.lado = lado;
        this.area = lado * lado;
    }
}

SquareInfo.java
Código:
public class SquareInfo {
 
    public static void main(String[] args) {
        Square sq = new Square();
        Square sq2 = new Square();
 
        sq.setLado(250);
        sq2.setLado(17);
 
        System.out.println("-----Informações do 1º Quadrado-----");
        System.out.println("Lado: "+ sq.getLado());
        System.out.println("Área: "+ sq.getArea());
        System.out.println();
        System.out.println("-----Informações do 2º Quadrado-----");
        System.out.println("Lado: "+ sq2.getLado());
        System.out.println("Área: "+ sq2.getArea());
    }
}

A herança é utilizada quando utilizo o "extends". Isto faz com que a classe "Square" herde todos os campos e métodos da classe "Figure". Assim quando crias um Square, este objecto terá os campos area e lado, e os métodos set's e get's destas duas variáveis.

Podes também organizar as classes por pacotes (por exemplo colocar as classes "Figure" e "Square" num pacote separado). Se o fizeres terás que inserir um "import.'nome do pacote'.*;" na classe main ("SquareInfo").
 
Última edição:
Back
Topo