Encapsulamento consiste em traçar limites fortes. Em um navegador web, isso pode significar que seu código para dispositivos móveis não pode ser abusado por outros códigos para dispositivos móveis. No servidor, pode significar a diferenciação entre dados validados e não validados, entre os dados de dois usuários ou entre os dados que os usuários podem ou não acessar.
package
à classe externa original. Mais insidiosamente, como uma classe interna pode acessar os campos private
na respectiva classe delimitadora, assim que uma classe interna se tornar uma classe de mesmo nível no código de bytes, o compilador converterá os campos private
acessados pela classe interna em campos protected
.
public final class urlTool extends Applet {
private final class urlHelper {
...
}
...
}
finalize()
como public
.super.finalize()
dentro de uma implementação de finalize()
. Em situações de código móvel, a outra prática propensa a erros de coleta de lixo manual pode se tornar uma ameaça à segurança quando um invasor é capaz de invocar maliciosamente um dos seus métodos finalize()
porque ele é declarado com acesso public
. Se você estiver usando finalize()
conforme ele foi concebido, não haverá motivo para declarar finalize()
com algo diferente de um acesso protected
.public finalize()
.
public final class urlTool extends Applet {
public void finalize() {
...
}
...
}
public
, final
e static
.public
, final
e static
é um bug. Como os arrays são objetos mutáveis, a restrição de final
requer que o próprio objeto de array seja atribuído apenas uma vez, mas não faz nenhuma garantia sobre os valores dos elementos de array. Como o array é público, um programa mal-intencionado pode alterar os valores armazenados nele. Na maioria das situações, o array deve se tornar private
.public
, final
e static
.
public final class urlTool extends Applet {
public final static URL[] urls;
...
}
public
, mas não final
. public
em um Applet e em classes usadas por um Applet devem ser declaradas como final
para impedir que um invasor manipule ou obtenha acesso não autorizado ao estado interno do Applet.public
, mas não como final
.
public final class urlTool extends Applet {
public URL url;
...
}