Call a class method

1

How can I display the method of this revised class in the Test class?

public interface Produto {

    void exibirNome(String nome);
}

public class Revista  implements Produto {

    @Override
    public void exibirNome(String nome) {

        System.out.println("Exibindo revista de nome: " + nome);

    }


}


public class Teste {

    private Produto produto;
    String nome;

    public Teste(Produto produto) {
        this.produto = produto;

    }

    public Produto getProduto() {
        return produto;
    }

    @Override
    public String toString() {

        //Aqui eu gostaria de passar o método exibirNome da classe Revista
    }

}

And pass on toString ();

Produto p = new Revista();
        Teste teste = new Teste(p);

        System.out.println(teste); //para exibir a revista
    
asked by anonymous 17.12.2016 / 23:42

3 answers

5

I made it work:

interface Produto {
    void exibirNome(String nome);
}

class Revista implements Produto {
    @Override
    public void exibirNome(String nome) {
        System.out.println("Exibindo revista de nome: " + nome);
    }
}

class Teste {
    private Produto produto;
    String nome;

    public Teste(Produto produto) {
        this.produto = produto;
    }

    public Produto getProduto() {
        return produto;
    }

    @Override
    public String toString() {
        produto.exibirNome(nome);
        return nome;
    }
}

public class Program {
    public static void main(String[] args)  {
        Produto p = new Revista();
        Teste teste = new Teste(p);
        System.out.println(teste);
    }
}

See running on ideone . And no Coding Ground . Also I placed in GitHub for future reference .

But this code does not make the slightest sense . I even thought of rewriting in a better way, but I did not find it so meaningless that it is. To make it right, it would have to change so much that it would be something completely different.

This interface does not make sense, this signature induces the bad implementation, the implementation of this method in the class does not make sense, use it within toString() does not make sense, class Teste has no meaning, has this property nome that is not actually used, even because it is there, and so on ...

    
18.12.2016 / 00:21
2

Following the principles of Herança and Polimorfismo , its Revista class implements the Produto interface and therefore its abstract methods. So, in your class Teste that has a product, you just have to make the following call.

produto.exibirNome();

So the produto attribute of the Teste class, which is a Revista , will behave following the implementation of the Journal class method. This is known as polymorphism. As in the example below:

public interface Animal {  
    public void fala();
}


public class Homem implements Animal{

    @Override
    public void fala() {
        System.out.println("Olá Mundo!");
    }
}

public class Gato implements Animal{

    @Override
    public void fala() {
        System.out.println("Miau!");
    }    
}

public class Polimorfismo {

    public static void main(String[] args) {
        Animal homem = new Homem();
        Animal gato = new Gato();

        homem.fala();
        gato.fala();
    }

}

What is the way out

Olá Mundo!
Miau!

  

String

for

public void exibirNome()

Becoming part of the final code

    public interface Produto {

    void exibirNome();
}

public class Revista  implements Produto {
    String nome;
    @Override
    public void exibirNome() {
            System.out.println("Exibindo revista de nome: " + nome);

    }
}
    
18.12.2016 / 18:16
0

In this format, to call a method inside any other class you need to do this:

new Revista().exibirNome("Mah oi!");

I would suggest you take a look at Java access modifiers to increase their knowledge.

    
18.12.2016 / 00:07