Declaração de variaveis em mesmo pacote

Montei vários métodos em um programa, mas surgiu algumas duvidas em relação a declaração de variáveis no mesmo pacote e em todo programa, pois fica difícil não repetir o mesmo nome nos métodos.

Neste exemplo abaixo seria correto:

[code]public class Modelo {

public static void main (String[] args) {  
    int valor;
    If (getEnviar() == true){ 
    valor = 123;
    Nome nome = new Nome();
    nome.Calc (valor);
    System.out.println( nome.x ); 
    System.out.println( nome.y ); 
    System.out.println( nome.id ); 
    }
    If (getEnviar() == false){ 
    valor = 56;
    Funcao funcao = new Funcao();
    funcao.Num (valor);
    System.out.println( funcao.x ); 
    System.out.println( funcao.y ); 
    System.out.println( funcao.posCodico ); 
   }
}  

} [/code]

[code]public class Nome {
String id; //Sem especificar a declaração automaticamente a variável é public ou protected?
int x;

public int Calc (int idade) {  
   
    int contador = 0;
    ..
    ..
    return y;
}  

}[/code]

[code]public class Funcao {
String posCodico;
int x;
public int Num (int codico) {

    int contador = 0;
    ..
    ..
    return y;
}  

}[/code]

Os métodos “Nome” e “Funcao” estão em mesmo pacote e possuem variáveis com mesmo nome. Que problemas posso ter?

Nenhum. Se são classes diferentes não tem problema possuir variáveis com mesmo nome. Outra coisa, você está fazendo if com I maiúsculo: If. O correto é if tudo minúsculo, pois palavras chaves em java são tudo minúsculo.

Outra dica sobre esse seu código.
Além do if ter que ser escrito com i minúsculo:

if (getEnviar() == true) {/*...*/}

// o if pode ser escrito apenas assim:

if (getEnviar()) {/*...*/}

// pois seu getEnviar já irá retornar true ou false certo?



if (getEnviar() == false) {/*...*/}

// aqui ele poderia ser escrito dessa outra forma:

if (!getEnviar()) {/*...*/}

// aqui ele verificaria se getEnviar NÃO for verdadeiro.

E em que situação seria necessário usar private ou protected?

[code]if (getEnviar() == true) {//}

// o if pode ser escrito apenas assim:

if (getEnviar()) {//}

// pois seu getEnviar já irá retornar true ou false certo?

if (getEnviar() == false) {//}

// aqui ele poderia ser escrito dessa outra forma:

if (!getEnviar()) {//}

// aqui ele verificaria se getEnviar NÃO for verdadeiro. [/code]
Valeu mesmo pela dica, ja tinha visto mas não entendido…

É bom sempre encapsular suas variáveis usando private e acessando via getters e setters. Já o protected é usado quando você quiser encapsular sua variável mas deixar que a classe filho tenha acesso direto à ela. Por exemplo:

public class A {
  private String nome;

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

public class B extends A {
  public void umMetodo() {
    System.out.println(nome);
    // dá erro pois a classe B não tem acesso às variáveis private da classe A

    System.out.println(getNome());
    //já aqui não dá erro pois ela está acessando o método getNome() que é public da classe A.
  }
}

Agora se a variável nome na classe A fosse protected em vez de private, a classe B poderia acessá-la sem problemas, porém outras classes que não são filhas da classe A não poderia acessá-la sem ser via get e set.

[quote]if (getEnviar()) {//}

// pois seu getEnviar já irá retornar true ou false certo?

if (getEnviar() == false) {//}

// aqui ele poderia ser escrito dessa outra forma:

if (!getEnviar()) {//}

// aqui ele verificaria se getEnviar NÃO for verdadeiro. [/quote]

Só complementando quando voce faz um if , não é necessário fazer o condicional == true ou == false …

 if(meuMetodo==true){

}else {

}

esta não é uma forma legal de programar…
voce pode simplesmente fazer isto

if(meuMetodo){
//se for verdadeiro já cai aqui 
}else{
//se não aqui (:
}

E para complementar oque nosso amigo falou sobre OO , é mais fácil pensar sobre declaração de variáveis da seguinte maneira:

protected só podem ser acessadas por Herança.

[code]public class Pessoa {
protected String nome;
protected Double tamanho;
protected Integer idade;
}

public class Supervisor extends Pessoa {
//Aqui tenho acesso total as variáveis declaradas na classe pai , seria o mesmo se estivesse declarando dentro da propria classe Supervisor;

public static void main(String[] args){
Supervisor sup = new Supervisor ();
sup.idade =10; //só é possível via herança por ser protected.
}
}

[/code]

private torna seu atributo invisível para qualquer outra classe , podendo ser acessado apenas pela instancia da classe e seus métodos get/set.

public class Pessoa {
private String nome;
private Double tamanho;
private Integer idade;

//getters and setters
}

public class Gerente extends Pessoa {
//aqui são os atributos próprios de gerente + os declarados em Pessoa...      
private Double salario;
}
public class Programa {
 
Gerente g = new Gerente ();

//aqui só consigo ter acesso aos valores das variáveis (caso já estivessem setados) , via métodos get .
system.out.println(g.getNome());
//ou
system.out.println(g.setNome("Mauricio-Carvalho.Blogspot.com")); // definir o valor da variável pelo seu metodo set.

}
}

e public , como o nome já diz é publica , ai a visibilidade depende do modificador da classe , se é default ou public .

Classe default :
nível de acesso = pacote;
Classe public :
nível de acesso = total (estamos nos referindo a classe , agora se dentro dela estiverem atributos protected ou private segue a mesma logica de níveis de acesso) .

Obrigados esdras_63 e mausexdd, os exemplos estão fáceis de entender

Tinha visto em alguma parte que não declarar as variáveis ficariam como protected. Meu próprio entendimento do protected estava equivocado pois entendia que a variável era acessada apenas dentro do pacote, agora vi que é pela classe filha extends.

[quote]Classe default :
nível de acesso = pacote; [/quote]
E para as variáveis dentro da classe que também são default, somente é visível dentro da classe? E visível dentro do pacote se declarar um objeto para classe “Modelo modelo = new Modelo()” ?

[quote]Classe public :
nível de acesso = total (estamos nos referindo a classe , agora se dentro dela estiverem atributos protected ou private segue a mesma logica de níveis de acesso) .[/quote]
No meu primeiro post a classe é publica enquanto que as variáveis não tem declaração, portanto a classe é publica e variáveis são default?
E quando todo o método é protected, como ficam as variáveis dentro do método?

1º Antes de olhar o modificar dos atributos , deve-se analisar primeiramente a classe .

Cenário :

Classe Default no package model com atributos públicos

[code]
package br.com.jr.model;

class FirstSample{
public String example;
public Integer age;
public double salary;
}
[/code] :

Mesmo meus atributos sendo públicos eu só consigo acessa-los de forma visível para o nível de classe (sem utilizar métodos get/set) , de outras classes que estejam criadas no mesmo pacote package br.com.jr.model;

package br.com.jr.model;

class SecondSample{

void myMethod {
example = "Write here 1 Example";
age = 10;
salary = 1.100;
}
}
//do pacote dataBase , nao consigo acessar as variáveis diretamente de maneira alguma. A não ser por get/set , mais mesmo assim não seria um encapsulamento.
package br.com.jr.dataBase;

PENSE DA SEGUINTE MANEIRA , DEFAULT = NÍVEL DE PACOTE , MESMO QUE SUA CLASSE FOR PUBLICA , E VICE-VERSA PARA AS VARIAVEIS;

Pense da Seguinte maneira , quando você instancia uma classe e cria um objeto , você quer utilizar oque tem dentro dela (variáveis) , agora deve ter em mente a melhor maneira para acessar essas variáveis , compreende? sugiro que voce de uma estudada em Encapsulamento …

Um exemplo da faculdade que sempre funciona … Quando você utiliza uma pilula de antibiótico , você tem uma capsula (objeto) que contém varias coisas dentro , porem você não tem acesso aos conteúdos químicos nem aos agentes ativos (variáveis) , apenas se dispõe do que precisa , você quer que aquele remédio te ajude com x problema , não precisa saber oque tem dentro dele…

Quando você encapsula um objeto , é a mesma coisa , suas outras classes não precisam saber diretamente tudo que tem dentro do seu objeto e sim apenas conseguir se beneficiar independente de qual seja o objetivo .

Vamos ver se eu entendi

package br.com.jr.model;

class FirstSample{
public String example;
}

Nao adianta declarar uma variável como public em uma classe default.

package br.com.jr.model;

public class FirstSample{
String example;
}

A classe é public mas as variáveis sao default, ao meu entender a classe seria visivel para outro pacote podendo inserir uma variável em um metodo(public) dentro da classe, mas nao poderia obter um retorno de variável do metodo a nao ser por GET.

class FirstSample{
String example;
}

Visivel somente no pacote.