Implementar um método void abstrato recebendo parâmetro

Boa noite!

Tentei de várias formas colocar para funcionar o método + setMatricula (String s : int) void, mas não estou conseguindo. Coloquei o modelo de classes em anexo para melhor entendimento.

Att.

Victor Almeida


O que você já tentou? Aparentemente não tem nenhum mistério, você implementa como qualquer outro método. Posta o seu código.

[code]/*

public class Pessoa {

private String nome;
private String cPF;

public abstract String getMatricula();
public abstract void setMatricula (String s); //ele fala que tem que receber a String s como int no modelo de classes, não sei muito bem oq fazer.


public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getcPF() {
    return cPF;
}

public void setcPF(String cPF) {
    this.cPF = cPF;
}

}[/code]

Boa noite Victor A.
Primeiramente, para ter métodos abstratos a classe tem que ser abstrata. E neste caso nenhuma das Classes são abstratas, pois se fosse ela seria identificada com o nome em Itálico.
Porém os métodos estão sendo identificados como abstratos, métodos estes setMatricula(String s:Int):void e +getMatricula():String.

Segundo, a descrição do método setMatricula(String s:int):void está incompleta, pois está faltando o nome a variável do tipo int.
Para criar este método seguindo este esquema ele ficaria assim:

public abstract void getMatricula(int String s);

Então tem que verificar isto.

O que está errado
Metodos abstratos só existem em Classes abstratas.
A assinatura deste metodo (setMatricula(String s:int):void) na UML está incorreto

Então o que pode ser feito:
Clocar a Classe pessoa com Abstrata (Elas não poderão ser Instanciadas);
Retirar o tipo inteiro ou colocar uma variável para referenciar ao tipo;

[color=red]PS.[/color] Posso estar enganado, se eu estiver por favor me Corrija!

Boa noite Victor A.
Primeiramente, para ter métodos abstratos a classe tem que ser abstrata. E neste caso nenhuma das Classes são abstratas, pois se fosse ela seria identificada com o nome em Itálico.
Porém os métodos estão sendo identificados como abstratos, métodos estes setMatricula(String s:Int):void e +getMatricula():String.

Segundo, a descrição do método +setMatricula(String s:int):void está incompleta, pois está faltando o nome a variável do tipo int.
Para criar este método seguindo este esquema ele ficaria assim:

public abstract void getMatricula(int String s);

Então tem que verificar isto.

O que está errado
Metodos abstratos só existem em Classes abstratas.
A assinatura deste metodo (setMatricula(String s:int):void) na UML está incorreto

Então o que pode ser feito:
Clocar a Classe pessoa com Abstrata;
Retirar o tipo inteiro ou colocar uma variável para referenciar ao tipo;

[color=red]PS.[/color] Posso estar enganado, se eu estiver por favor me Corrija!

Boa noite,

Então…se eu coloco public abstract void setMatricula (int String s); não consigo rodar. :stuck_out_tongue:

O netbeans fala que é esperado um ‘)’.

Att.

Victor Almeida

Porque o método não pode receber como argumento uma variável do tipo int String, ou a variável é um objeto do tipo String ou ela pertence ao tipo primitivo int.

Portanto, a sintaxe pode ser de um dos métodos seguintes, também achei confusa a notação UML, porém, como não tenho muito conhecimento nesta parte, prefiro citar apenas a sintaxe do método

//Alternativa 1
public abstract void setMatricula(String mat); //recebe uma string como argumento
//Alternativa 2
public abstract void setMatricula(int mat); //recebe um inteiro como argumento

E a classe, para conter métodos abstratos, deve ser abstrata.

abraços

Como eu disse acima, você tem duas formas para tirar esta confusão das UML

//Adicionar uma variável para referenciar ao tipo int
public abstract void setMatricula (int i, String s);

//Retirar o tipo int
public abstract void setMatricula (String s);

Se isto for um tipo Homework e tiver tempo de tirar duvida com o professor (Tire!), se não tiver como faça das duas maneiras e para sair melhor ainda faça um terceiro modo

//Como parâmetro um int public abstract void setMatricula (int s)

Abrass…
Qualquer coisa é só falar por aqui, sempre tem pessoas dispostas a ajudar…

ve se isso ajuda:

MeuGenerico


package usandoclassesabstratas;


public abstract class MeuGenerico
{
    private String nome;
    private String tipo;

    /**
     * @return the nome
     */
    public String getNome()
    {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome)
    {
        this.nome = nome;
    }

    /**
     * @return the tipo
     */
    public String getTipo()
    {
        return tipo;
    }
    /**
     * @param nome the nome to set
     */
    public void setTipo(String tipo)
    {
        this.tipo = tipo;
    }
}

Carro:


package usandoclassesabstratas;

// aqui resolvi implementar.
public class Carro extends MeuGenerico
{

    public String getNome()
    {
        //
        return super.getNome() + "_classe1";
    }

    public void setTipo(String vazia)
    {
        //super.setNome(vazia+"_classe1") ;
    }
}

Caminhão:

package usandoclassesabstratas;

 // aqui não resolvi implementar.
public class Caminhao extends MeuGenerico
{
}

Main e lógica de ação:

package usandoclassesabstratas;


public class UsandoClassesAbstratas
{
 
    public void printNome(MeuGenerico meugenerico)
    {
        System.out.println(meugenerico.getNome());
    }
    
    public void setAndPrintNome(MeuGenerico meugenerico, String novoNome)
    {
        System.out.println("Nome antigo: "+meugenerico.getNome());
        System.out.println("setando novo nome:" + novoNome);
        meugenerico.setNome(novoNome);
        System.out.println("pegando nome: "+meugenerico.getNome());
    }
    
    
    public void printTipo(MeuGenerico meugenerico)
    {
        System.out.println(meugenerico.getNome());
    }
    
    public void setAndPrintTipo(MeuGenerico meugenerico, String novoTipo)
    {
        System.out.println("Tipo antigo: "+meugenerico.getTipo());
        System.out.println("setando novo Tipo:" + novoTipo);
        meugenerico.setTipo(novoTipo);
        System.out.println("pegando Tipo: "+meugenerico.getTipo());
    }
    
    

    public static void main(String[] args)
    {
        UsandoClassesAbstratas logica = new UsandoClassesAbstratas();
        Carro c1 = new Carro();
        c1.setNome("carro1"); 
        c1.setTipo("carro");
        Caminhao c2 = new Caminhao();
        c2.setNome("caminhao2"); 
        c2.setTipo("caminhao2");
        logica.printNome(c1);
        logica.printNome(c2);
    }
}

Boa noite,

Oq realmente está confuso é o UML, pelo que eu entendi ele quer que o método receba a String da matricula do professor ou aluno como int. Não consigo visualizar o propósito disso, mas tudo bem.
Pensei que poderia haver alguma forma de colocar isso logo no método abstrato - já que estava representado no UML, mas vejo que não.
Obrigado pela ajuda. :slight_smile:

Se eu tiver novas dificuldades que não consiga solucionar volto a postar.

Mas se ele colocou isto na UML tenho uma certeza de 90% que esta sintaxe não existe nem na UML.

Você disse,Não consigo visualizar o propósito disso, discordo!

Consegui enxergar algo: Ele pode estar colocando isto para vocês entenderem que a matricula tem que ser compostas por números inteiros.
E com isto ele queira que vocês tratem isto.

Isto foi apenas uma abstração que eu tive.

Abrass