Re: [java-list] bug Java - protected
Protected dá acesso do atributo/método tanto a todas as subclasses dessa classe, quanto às classes do pacote no qual a mesma classe está incluído. O modificador friendly, quando vc não coloca modificador nenhum, é mais restritivo que o protected. A seguinte sequência apresenta os especificadores de acesso em Java, do mais abrangente ao mais restrito: public - protected - friendly (nenhum modificador) - private Rosfran Lins Borges Analista de Sistemas - NDS [EMAIL PROTECTED] Fóton® Informática e Serviços Fone: (61) 328 5060 R.: 204 - Original Message - From: Tomaz Foa Binsztajn [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Friday, April 12, 2002 4:59 PM Subject: Re: [java-list] bug Java - protected Gaúcho: Posso estar falando bobagem (se estiver, me corrija), mas o protected não promove acesso de pacote a variável. Na minha opinião, você poderia acessar a variável nome de SuperClasse dentro da classe Teste porque elas estão no mesmo pacote. Não vejo de errado nisso... []s Tomaz On Thursday 11 April 2002 08:19, you wrote: Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] bug Java - protected
Gaúcho: Posso estar falando bobagem (se estiver, me corrija), mas o protected não promove acesso de pacote a variável. Na minha opinião, você poderia acessar a variável nome de SuperClasse dentro da classe Teste porque elas estão no mesmo pacote. Não vejo de errado nisso... []s Tomaz On Thursday 11 April 2002 08:19, you wrote: Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] bug Java - protected
Bug?? Posso estar errado, mas eu acho que o modificador protected permite o acesso pelas classes de mesmo pacote e classes derivadas, e não somente às classes derivadas. Até a versão 1.1 do JDK (se não me engano) existia o modificador private protected que fazia exatamente isso que você está imaginando, restringia o acesso somente às classes derivadas e não às de mesmo pacote. Mas esse modificador foi extinto a partir das versões posteriores. []s Rodrigo Miguel - Original Message - From: Gaucho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, April 11, 2002 8:19 AM Subject: [java-list] bug Java - protected Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] bug Java - protected
Gaucho, um exemplo de que está correto é a classe Applet. Ela é uma subclasse de java.awt.Panel, mas está em seu próprio pacote, java.applet. Você utiliza protected quando você não quer um método disponível genericamente para objetos aleatórios, mas quer que a subclasse tenha acesso a ele. Abraços, Renato. --- Marcelo Alves [EMAIL PROTECTED] escreveu: Gaucho, O modificador protected funciona EXATAMENTE como deveria, está na especificacao da linguagem Java. Se não acreditar olhe os seguintes docs (escrito pelos criadores do Java) : http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36191 e http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104285 [Em vermelho, a parte que define isso] 6.6.1 Determining Accessibility a.. A package is always accessible. b.. If a class or interface type is declared public, then it may be accessed by any code, provided that the compilation unit (§7.3) in which it is declared is observable. If a top level class or interface type is not declared public, then it may be accessed only from within the package in which it is declared. c.. An array type is accessible if and only if its element type is accessible. d.. A member (class, interface, field, or method) of a reference (class, interface, or array) type or a constructor of a class type is accessible only if the type is accessible and the member or constructor is declared to permit access: a.. If the member or constructor is declared public, then access is permitted. All members of interfaces are implicitly public. b.. Otherwise, if the member or constructor is declared protected, then access is permitted only when one of the following is true: a.. Access to the member or constructor occurs from within the package containing the class in which the protected member or constructor is declared. b.. Access is correct as described in §6.6.2. c.. Otherwise, if the member or constructor is declared private, then access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member. d.. Otherwise, we say there is default access, which is permitted only when the access occurs from within the package in which the type is declared. - Original Message - From: Gaucho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, April 11, 2002 8:19 AM Subject: [java-list] bug Java - protected Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - ___ Yahoo! Empregos O trabalho dos seus sonhos pode estar aqui. Cadastre-se hoje mesmo no Yahoo! Empregos e tenha acesso a milhares de vagas abertas! http://br.empregos.yahoo.com/ -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] bug Java - protected
Todo membro protected eh tb um membro friendly. []´s Luiz Reginaldo [EMAIL PROTECTED] escreveu: Opa! O protected não tem acessibilidade pública! Um membro protected éacessível na classe em que foidefinido, e também em suas subclasses.Um grande abraço,Luiz Reginaldo- Original Message -From: "Gaucho" <[EMAIL PROTECTED]>To: <[EMAIL PROTECTED]>Sent: Thursday, April 11, 2002 8:19 AMSubject: [java-list] bug Java - protected Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento emrelação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador "protected" infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro "protected" e depois tente acessá-lo de outra classe que não sejaestendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = "oo"; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] --- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htmregras da lista: http://www.soujava.org.br/regras.htmhistorico: http://www.mail-archive.com/java-list%40soujava.org.brpara sair da lista: envie email para [EMAIL PROTECTED] -oYahoo! Empregos O trabalho dos seus sonhos pode estar aqui. Cadastre-se hoje mesmo no Yahoo! Empregos e tenha acesso a milhares de vagas abertas!
Re: [java-list] bug Java - protected
Hehehe, Seguinte: se vc fizer package XYZ; class A {} package XYZ; class B extends A {} tudo bem. - Mas se vc fizer: package ABC; class A {} package XYZ; class B extends A {} nao vai rolar ai tem q usar protected, que na verdade, é mais acessivel que default. []s Leandro Luiz Carlos Bentes dos Anjos [EMAIL PROTECTED] on 15/04/2002 10:15:45 Please respond to [EMAIL PROTECTED] To: [EMAIL PROTECTED] cc: Subject: Re: [java-list] bug Java - protected Todo membro protected eh tb um membro friendly. []´s Luiz Reginaldo [EMAIL PROTECTED] escreveu: Opa! O protected não tem acessibilidade pública! Um membro protected é acessível na classe em que foidefinido, e também em suas subclasses. Um grande abraço, Luiz Reginaldo - Original Message - From: Gaucho To: Sent: Thursday, April 11, 2002 8:19 AM Subject: [java-list] bug Java - protected Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected inf! elizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.souja! va.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] - o Yahoo! Empregos O trabalho dos seus sonhos pode estar aqui. Cadastre-se hoje mesmo no Yahoo! Empregos e tenha acesso a milhares de vagas abertas! -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] bug Java - protected
Gaucho, O modificador protected funciona EXATAMENTE como deveria,está na especificacao da linguagem Java. Se não acreditar olhe os seguintes docs (escrito pelos criadores do Java) : http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36191 e http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104285 [Em vermelho, a parte que define isso] 6.6.1 Determining Accessibility A package is always accessible. If a class or interface type is declared public, then it may be accessed by any code, provided that the compilation unit (§7.3) in which it is declared is observable. If a top level class or interface type is not declared public, then it may be accessed only from within the package in which it is declared. An array type is accessible if and only if its element type is accessible. A member (class, interface, field, or method) of a reference (class, interface, or array) type or a constructor of a class type is accessible only if the type is accessible and the member or constructor is declared to permit access: If the member or constructor is declared public, then access is permitted. All members of interfaces are implicitly public. Otherwise, if the member or constructor is declared protected, then access is permitted only when one of the following is true: Access to the member or constructor occurs from within the package containing the class in which the protected member or constructor is declared. Access is correct as described in §6.6.2. Otherwise, if the member or constructor is declared private, then access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member. Otherwise, we say there is default access, which is permitted only when the access occurs from within the package in which the type is declared. - Original Message - From: "Gaucho" [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, April 11, 2002 8:19 AM Subject: [java-list] bug Java - protected Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador "protected" infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro "protected" e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = "oo"; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
[java-list] Re:[java-list] bug Java - protected
Seguinte Gaucho, pelo que eu sei, isso não é nenhum bug, esse é o comportamento correto de um membro protected, pois por definição, um membro declarado protected tem visibilidade no pacote ou então em subclasses fora do pacote, seria uma forma de visibilidade maior que default (membro declarado sem modificador de acesso e enxergado apenas dentro do pacote) e menor do que public(este sim disponível aoende quer que a clase apareça), para um maior esclarecimento, sugiro o link para o jls: http://java.sun.com/docs/books/jls/second_edition/html/na mes.doc.html#104333 Abraços, Marcelo Sousa Ancelmo. Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA -- -- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list% 40soujava.org.br para sair da lista: envie email para java-list- [EMAIL PROTECTED] --- -- __ Quer ter seu próprio endereço na Internet? Garanta já o seu e ainda ganhe cinco e-mails personalizados. DomíniosBOL - http://dominios.bol.com.br -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -
RES: [java-list] bug Java - protected
Sim cara, eu realmente não acho que isso seja um defeito (foi uma decisão (estranha) de projeto da equipe que criou o Java), mas quando vou ensinar aos meus alunos o conceito de "membros protegidos" sem eles usarem pacotes, fica sem sentido. A definição em Orientação a Objetos (nada a ver com Java) é que um membro protegido só pode ser acessado pela classe que o declarou ou uma de suas subclasse. Em Java, isso só ocorre quando você agrupar as classes dentro de um pacote. Se você não usar pacotes, o modificador protected se comporta igual ao public. (porque Java considera todas as classes em um mesmo "pacote padrão" se um pacote não for declarado explicitamente) Lembra que "pacotes" é uma técnica adotada pelo Java mas que não é definida em Orientação a Objetos. É isso aí, não precisa ficar defendendo o Java, melhor é discutir o comportamento da linguagem, buscando aprender mais com a opinião de todos. E não precisa ficar citando os criadores do Java :^) Se as tuas opiniões forem espertas, elas valem tanto quanto a deles :^)) Um abraço, Felipe Gaúcho
[java-list] bug Java - protected
Alguém sabe se no jdk1.4 o problema do protected já foi resolvido ? Para quem não sabe, o modificador protected não funciona como deveria. Na verdade, em Java, quando você declara uma variável protegida, ela acaba tendo acessibilidade pública. O único encapsulamento provido pelo protected é o encapsulamento em relação ao pacotes. Mas no caso da implementação de classes desvinculadas de pacotes, o modificador protected infelizmente não funciona... Duvida? :^)) faça um teste: implemente uma classe com algum membro protected e depois tente acessá-lo de outra classe que não seja estendida da primeira: class Superclasse { protected String nome = null; } public class Teste { static public void main(String[] args) { new Teste(); } Teste() { Superclasse pai = new Superclasse(); // isso não deveria ser acessível somente pela classe // Superclasse ou uma de suas subclasses ?? pai.nome = oo; } } -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -