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 !
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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 LigaForaDoPacotepara 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.