Diferença de private e public para métodos [RESOLVIDO]

Olá pessoal do GUJ!

Bem, estou lendo livro do Java como Programar, que por sinal é um ótimo livro. Então me deparei aqui com o public e o private para declarar um método, portanto vejamos:

[code]public void displayMessage()
{
System.out.print(“Olá! Estou no GUJ!”);

}
[/code]

Qual a diferença de mudar o public para private ? Me dê informações e exemplos para que eu possa entender. Vale ressaltar também a variável de instância que pode ser modificada com private.

Abraços…

Cara um metodo com modificador de acesso public, pode ser acessado por qualquer classe em qualquer pacote. Ja um metodo private pode ser acessado somente pela classe que o implementa.

[code]class A{

public void methodPublic(){
  methodPrivate();
}
private void methodPrivate(){
}

}

class B{

public void teste(){
    A a = new A();
    //Correto
    a.methodPublic();
    
    //Erro de Compilacao
    a.methodPrivate();
}

}[/code]

Ou seja, se o método for public, você consegue enxergar ele fora da classe, se for private, não conseguirá, porque apenas a classe que gerou este metodo pode usa-lo.

A diferença entre o public e o private está na visibilidade entre as classes
enquanto um metodo é publico todas as outras classes que estão no pacote conseguirão “chama-lo”
mas se for private somente a classe que da origem a ele conseguirá utiliza-lo

Pode até não ter sido, mas pareceu bem prepotente da sua parte… heueheuehueheu

1 - Você já sabe o que é uma classe e já consegue identificar pra que serevem os métodos e os atributos ??? Se sim… legal, se não, volte e estude mais um pouco porque estás atropelando assunto;

2 - Se vocẽ respondeu sim a 1 responda agora… Você já entendeu o modificador de acesso public ou até mesmo o que são os modificadores de acesso ??? Se sim, a sua pergunta será respondida pelo próprio livro, se não, volte e estude sobre modificadores de acesso, no próprio livro.

Desculpe se pareceu rude, mas se eu usasse o espaço pra lhe explicar vocẽ não teria entendido, e a sua pergunta dá pra ser respondida só estudando… Digo isso porque tenho o Java Como Programar 4 edição e aprendi por ele…

Espero que você volte ao tópico com uma pergunta do tipo: “Não ví ventagens em usar private para métodos blá blá blá… Porque acho que poderia querer estendẽ-los depois para que outras classes pudessem o enxergar… Estou certo em meu raciocínio ??? O que vocês fariam ???”

Aí sim, aparecerÃO pessoas dispostas a ajudar…

Abs [] e bons estudos…

Olá hackum,

O ideal seria que primeiramente vc entendesse o conceito de Orientação a Objecto e em seguida a sintaxe da linguagem Java…

Sua pergunta será muito bem respondida e com certeza vai clarear muito sua ideia de modificadores de acesso se vc ler o capitulo 1 - Declarações e Controle de Acesso, do livro da Katy Sierra SCJP guia de estudo.

Comece mais devagar, leia mais sobre os fundamentos antes de por a mão na massa… pode confundir vc no começo…

blz
Boa sorte
Fallow

é verdade…e pior q java lá na frente tem nomes que se vc nao viu antes vai gerar uma confusãozinha…rsrsrs

siga uma sequencia lógica que os autores trazem…
e sobre a sua pergunta, acho que ja foi bem respondida anteriomente!
vlw

Olá!
Eu entendi sim o modificador de acesso public e private. Mas, a questão é o seguinte: Qual é a vantagem de usar private [/url]?

Vejamos um exemplo:

[code]//Gradebook.java
//Classe GradeBook que contém uma variável de instância courseName
//e métodos para configurar o obter o seu valor

public class GradeBook {

private String courseName; //nome do curso para esse GradeBook
                           //variável de instância

//método para configurar o nome do curso
public void setCourseName(String name)
{
	
	courseName = name; //armazena o nome do curso
	
}

//método para recuperar o nome do curso
public String getCourseName()
{
	
	return courseName; 
	
}

//exibe uma mensagem de boas-vindas para o usuário GradeBook
public void displayMesage()
{
	//essa instrução chama getCourseName para obter o
	//nome do curso que esse GradeBook representa
	System.out.printf("Bem vindo(a) a classe GradeBook! %s\n",getCourseName());		
}

}[/code]

Por que ele usou o private na variável de instância ? O livro só quis me mostrar ?
Eu digo, pq não tem utilidade nenhuma.
Até mais…

[quote=hackum]Olá!
Eu entendi sim o modificador de acesso public e private. Mas, a questão é o seguinte: Qual é a vantagem de usar private [/url]?

Vejamos um exemplo:

[code]//Gradebook.java
//Classe GradeBook que contém uma variável de instância courseName
//e métodos para configurar o obter o seu valor

public class GradeBook {

private String courseName; //nome do curso para esse GradeBook
                           //variável de instância

//método para configurar o nome do curso
public void setCourseName(String name)
{
	
	courseName = name; //armazena o nome do curso
	
}

//método para recuperar o nome do curso
public String getCourseName()
{
	
	return courseName; 
	
}

//exibe uma mensagem de boas-vindas para o usuário GradeBook
public void displayMesage()
{
	//essa instrução chama getCourseName para obter o
	//nome do curso que esse GradeBook representa
	System.out.printf("Bem vindo(a) a classe GradeBook! %s\n",getCourseName());		
}

}[/code]

Por que ele usou o private na variável de instância ? O livro só quis me mostrar ?
Eu digo, pq não tem utilidade nenhuma.
Até mais…[/quote]

E ai amigo acredito que você precisa ler algo sobre Orientação a Objeto, pois isso ai que você esta perguntando são conceitos muito básicos de OO, enfim isso que você esta fazendo chama - se encapsulamento. Agora qual a vantagem? Imagine por exemplo que vc tem um atributo que não pode ser modificado, você cria somente o método get… e por ai vai… Acho melhor você ler sobre OO e depois voltar para o java… Bem isso é o que eu penso!

olá hackum,

Concordo com os amigos do forum!!

Para você entender a forma de se utilizar os modificadores de acesso, vc precisa saber de cor a Orientação a Objeto e depois ler sobre acoplamento e coesão!!

Não adianta vc proceguir aqui perguntando sobre o que é ou não melhor se vc nao entender oq que vai precisar mesmo saber…

Tenha calma, antes de por a mão na massa leia mais artigos de introdução sobre Java e Orientação a Objeto, fundamentos, controle de fluxo,Wrapers,Formaters e IO,Encapsulamento,etc…

Vc vai ter mais dificuldade se continuar querendo aprender no estilo “farpa na unha”!!

Leia mais, existem ótimos livros e tutoriais aqui meso no guj!!

Abraço

[quote=hackum]Olá!
Eu entendi sim o modificador de acesso public e private. Mas, a questão é o seguinte: Qual é a vantagem de usar private ?

Por que ele usou o private na variável de instância ? O livro só quis me mostrar ?
Eu digo, pq não tem utilidade nenhuma.
Até mais…[/quote]

Opa… blz ??? A pergunta não tinha sido essa não… se você for no seu primeiro POST (Sem editar é claro) verá que não foi… mas enfim… Agora a pergunta faz mais sentido… mostra que aprendeste… Se já entendeste o conceito de ambos, fica mais fácil entender quando usar um ou outro…

estude OO e Encapsulamento como o amigo acima lhe indicou… Mas ainda assim dá pra adiantar algo…

suponha que eu tenho a seguinte situação:

public class Gato {
   public int tamanho;
}

public class Testgato{
   public static void main(String args[]){
      Gato gato = new Gato();
      gato.tamanho = -10;
   }
}

Isso seria completamente válido, logo uma boa prática é…

public class Gato {
   private int tamanho;

   public void setTamanho(int tamanho){
      if(tamanho <= 0) 
         System.out.println("Coloque um tamanho apropriado para seu bichano...");
      else
         this.tamanho = tamanho;
   }
}

public class Testgato{
   public static void main(String args[]){
      Gato gato = new Gato();
      gato.setTamanho(-10);
   }
}

agora sim, você deu uma espécie de proteção ao seu atributo…

Perceba, esse é um dos usos mais famosos… Porém sempre que vocẽ quiser um atributo ou método exclusivo de uma classe, use o Private… ele é BEM útil…

Abs [] e bons estudos…

Compreendi Adriano. Mas, por qual motivo eu tenho que dá proteção ao meu atributo [/url]
?

Pare de pensar por 1 minuto que você vai usar Java para Programar somente seus sistemas de agendas e pessoais que vocẽ possa vir a imaginar e se coloque dentro de uma equipe de uns 20 - 30 Programadores…

Você vai ter que desenvolver uma solução pra uma outra equipe que não está no mesmo estado ou país que você e aquela sua classe linda e maravilhosa que foi toda prontinha pra receber valores lindos e maravilhosos, vai com seus atributos públicos… Pois bem, vocẽ pega um EU da vida e o primeiro teste que vou fazer na Lib que vocẽ mandou e com a sua classe, é passar um valor absurdo pra ele… Se for público, melhor ainda, posso “estuprar” sua classe… heueheuehueheu… esse exemplo é meio utópico, sendo que até então nunca trabalhei assim com Java… heueheuehu

Mas lembre-se, como falei no POST acima, essa é somente uma das possibilidades de uso do Private. Quando você for evoluindo nos estudos e no desenvolvimento de aplicações em Java, vai começar a entender na prática quando usá-lo… Por hora, só entenda-o…

Abs []

Boa noite a todos.

Se você observar os exemplos de vários posts aqui apresentados, vai reparar que os modificadores de acesso não se aplicam somente a métodos, mas também em atributos (variáveis) e classes.

Se voce declarar uma classe sem modificador de acesso, como no exemplo abaixo:

    class Teste {
           .....
           .....
    }

Essa classe só irá se exergada dentro do pacote (package), Esperamos que voce já tenha aprendido isto também.

Outra coisa que voce deve aprender que os modificadores de acesso também não se limitam a “public” e “private”, mas também existe o “protected” (Protegido), que só permite métodos serem acessados entre classes herdadas (estendidas - extends). Bom herança já é outra história.

Para você não atropelar isto tudo, faça que os membros deste Forum te sugeriu, estude mais um pouco no livro que realmente estes conceitos estão lá, principalmente no livro que voce indicou, pois tenho esse livro já na sua 8ª edição.

Sensacional o que os nossos amigos disse. Obrigado por me ajudar, consigui compreender de como funciona public e private e dentro de vários modificadores de acesso.

Até mais…