Olá!
Quando me disseram que o "default é acessível no pacote" não entendi bem.
Alguém poderia me dar um Exemplo PRÁTICO do acesso Default no Java, por favor ?
Com todas as possibilidades envolvidas: private, protected e public também.
Obrigado !
Olá!
Quando me disseram que o "default é acessível no pacote" não entendi bem.
Alguém poderia me dar um Exemplo PRÁTICO do acesso Default no Java, por favor ?
Com todas as possibilidades envolvidas: private, protected e public também.
Obrigado !
Os níveis são os que você disse: private, default, protected e public
Private: A única classe que tem acesso ao atributo é a própria classe que o define, ou seja, se uma classe Pessoa declara um atributo privado chamado nome, somente a classe Pessoa terá acesso a ele.
Default: Tem acesso a um atributo default (identificado pela ausência de modificadores) todas as classes que estiverem no mesmo pacote que a classe que possui o atributo.
Protected: Praticamente igual ao default, com a diferença de que se uma classe (mesmo que esteja fora do pacote) estende da classe com o atributo protected, ela terá acesso a ele. Então o acesso é por pacote e por herança.
Public: Todas as classes do projeto tem acesso :)
Oi.
Alguém tem um exemplo COM código?
Obrigado
Opa, ainda estou na espera. :-)
Vamos la Marcelo:
Primeiro vamos criar uma classe Carro
com um método para ligar o carro:
package br.com.modelo;
public class Carro {
void ligar() {
System.out.println("Liguei o carro");
}
}
Repare que a classe se encontra no pacote br.com.modelo
, então vamos criar uma outra classe responsável por testar o método ligar
:
package br.com.modelo;
public class LigarCarro {
public static void main(String[] args) {
Carro carro = new Carro();
carro.ligar();
}
}
Veja novamente que ambas estão no mesmo pacote, então tudo irá funcionar, pois o modificar de acesso default é publico para o próprio pacote.
Porém se criarmos uma outra classe, com o mesmo método main, FORA do pacote onde se localiza a classe Carro
, o código não irá funcionar:
package br.com.controller;
import br.com.modelo.Carro;
public class LigarCarroFora {
public static void main(String[] args) {
Carro carro = new Carro();
carro.ligar();
}
}
Veja que o código nem compila, pois o método ligar
não é visível para a classe LigarCarroFora
, podemos resolver o problema tornando o método publico ou adicionado a classe no mesmo pacote da classe Carro
.
Espero ter ajudado.
Ajudou bastante!
Agora nesse mesmo contexto, faz uma brincadeira com um método "protected", por favor.
Obrigado.
Vamos:
Imagine que temos uma classe Carro
dentro do pacote br.com.modelo
:
package br.com.modelo;
public class Carro {
protected void liga() {
System.out.println("Vruuum!!!");
}
}
Se criarmos uma outra classe no mesmo pacote para ligar o carro, a mesma irá funcionar:
package br.com.modelo;
public class LigaCarro {
public static void main(String[] args) {
Carro c = new Carro();
c.liga();
}
}
Porém se a classe para ligar o carro esteja em outro pacote, o código não iria compilar, pois o modificador de acesso protected só pode ser acessado por classes do mesmo pacote ou classes filhas(extends):
package br.com.modelo2;
import br.com.modelo.Carro;
public class LigaForaDoPacote {
public static void main(String[] args) {
Carro c = new Carro();
c.liga();
}
}
O código acima não compila, para resolver o problema devemos definir o método liga
como público ou criar uma nova classe no pacote br.com.modelo2
que herde de Carro e chame o método liga
:
package br.com.modelo2;
import br.com.modelo.Carro;
public class CarroForaDoPacote extends Carro {
public void ligaDaMae() {
super.liga();
}
}
Assim, podemos refatorar a classe LigaForaDoPacote
para utilizar a classe CarroForaDoPacote
, pois ao herdar de carro, por mais que as classes sejam de pacotes diferentes, é possível acessar o método pois esta definido como protected.
package br.com.modelo2;
public class LigaForaDoPacote {
public static void main(String[] args) {
CarroForaDoPacote c = new CarroForaDoPacote();
c.ligaDaMae();
}
}
Espero ter ajudado.
Ajudou sim, obrigado.
De nada, sempre que precisar não deixe de criar suas dúvidas.