No Java, existem quatro tipos de "permissões" de acesso a métodos (isso também vale para classes e propriedades, com algumas exceções...) que, dependendo de sua escolha, parte do seu código-fonte vai ou não "enxerga-la" durante a execução/compilação deste. São elas:
- public : A mais fácil de explicar, pois todo código tem acesso a ela! :)
Exemplo:
Arquivo: Util.java
package teste.util;
public class Util {
public void nothing() {System.out.printf("Estou fazendo %s\n","Nada");
}
}
Arquivo: Main.java
package teste.main;
import teste.util.Util;
public class Main {
public static void main(String... args) {
Util util = new Util();
util.nothing();
}
}
- private : A mais restrita das quatro, onde somente a classe que a declarou tem acesso:
Arquivo: Util.java
package teste.util;
public class Util {
//Este método é chamado somente dentro desta classe
private void privateNothing() {
System.out.printf("Estou fazendo %s\n","Nada");
}
public void publicNothing() {
System.out.println("Será que chamo?");
this.privateNothing();
}
}
Arquivo: Main.java
package teste.main;
import teste.util.Util;
public class Main {
public static void main(String... args) {
Util util = new Util();
//util.privateNothing(); //NÃO FUNCIONA
util.publicNothing();
}
}
(Até aqui, foi bem simples explicar. Mas a partir de agora que vem o problema... :P)
- protected : Este "acesso" é meio estranho, mas vamos lá: a classe que declarou, as classes que estão no mesmo pacote e a classe que herdou desta, tem acesso a ela.
Putz... Confuso não? Melhor pedir ajuda ao exemplo. (universitários? nem pensar!) :P
Arquivo: Util.java
package teste.util;
public class Util {
protected void protectedNothing() {
System.out.printf("Estou fazendo %s\n","Nada");
}
}
Arquivo: Inutil.java
package teste.util;
//Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
public void nothing() {
Util util = new Util();
util.protectedNothing();
}
}
Arquivo: HerancaUtil.java
package teste.heranca;
import teste.util.Util;
//Herdou, mas não esta no mesmo pacote (isto funciona!)
public class HerancaUtil extends Util {
public void nothing() {
super.protectedNothing();
}
}
Arquivo: Main.java
package teste.main;
import teste.heranca.HerancaUtil;
import teste.util.Inutil;
import teste.util.Util;public class Main {
public static void main(String... args) {
Util util = new Util();
//util.protectedNothing(); //NÃO FUNCIONA
Inutil inutil = new Inutil();
inutil.nothing();
HerancaUtil herancaUtil = new HerancaUtil();
herancaUtil.nothing();
}
}
(Só falta uma... :) )
- default : O acesso é restrito as classes que estão no mesmo pacote, ou seja, classes que não estejam no mesmo pacote, mesmo as que herdam da que declarou o método, não o acessam.
Arquivo: Util.java
package teste.util;
public class Util {
void defaultNothing() {
System.out.printf("Estou fazendo %s\n","Nada");
}
}
Arquivo: Inutil.java
package teste.util;
//Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
public void nothing() {
Util util = new Util();
util.defaultNothing();
}
}
Arquivo: HerancaUtil.java
package teste.heranca;
import teste.util.Util;
//Herdou, mas não esta no mesmo pacote (NÃO funciona!)
public class HerancaUtil extends Util {
public void nothing() {
//super.defaultNothing(); //NÃO FUNCIONA
}
}
Arquivo: Main.java
package teste.main;
import teste.heranca.HerancaUtil;
import teste.util.Inutil;
import teste.util.Util;public class Main {
public static void main(String... args) {
Util util = new Util();
//util.defaultNothing(); //NÃO FUNCIONA
Inutil inutil = new Inutil();
inutil.nothing();
}
}
(Ufa, terminou! :) )
Espero que alguém compreenda o que esta escrito... :P
Até mais!
Um comentário:
Olá Takemura, podes me adicionar no skype ou no gmail ? Se sim lá vai os contatos de ambas as redes - Skype: Leviarados / E-mail: levicicero@gmail.com - Valeu meu querido, aguardo seu contato.
Postar um comentário