Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Gozado, consegui testar no 1.3.0 build C e nao compilou tb..., deu o mesmo erro de visibilidade, soh compila se o metodo for declarado public na superclasse ou se eu fizer um overriding em Filho soh pra fazer super.algo(). Nao sei se vc jogou o codigo exatamente como eu fiz, i. e., EM DOIS PACOTES diferentes, pq no mesmo pacote eu sei q compila mesmo. Se vc puder confirmar isso... Resumindo minhas tentativas ateh agora: 1.1.7 - VA 3.0.2 - nao compila! 1.2.2 build W - Sun - nao compila! 1.3.0 build C - Sun - nao compila! filho\Filho.java:8: No method matching algo() found in class filho.Filho. algo(); //ERRO DE VISIBILIDADE DE ACESSO!!! O codigo original encontra-se logo abaixo para as almas destemidas q queiram testar este comportamento estranho do Java - lembrando: em dois pacotes diferentes... Joguei metade das msgs desta thread fora pra aliviar minha msg (jah tava em 17k!). Quem acompanhou ateh aki, sabe o q rolou e soh o q sobrou eh q eh pertinente apos todas as explicacoes, anyway... Michael Nascimento Santos Sun Certified Programmer for the Java 2 Platform Analista/Consultor Moderador SouJava - www.soujava.org.br CPM Sistemas - www.cpm.com.br From: [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Date: 9 Jul 2001 10:47:16 -0700 Carlos, o fato da Inner Class ser private nao faz diferenca. Michael, rodei o teu codigo nos seguintes compiladores: jdk 1.1.8_008 jdk 1.2.2_008 jdk 1.3.1 jdk 1.4 (beta) Que sao todas as versoes que eu tenho na minha maquina (para testes de compatibilidade) O teu programa compila em todas as versoes. Usei o JBuilder 4 para os testes. Nesse ponto esse IDE eh realmente muito bom, eh o ambiente mais facil para trocar de JDK que eu jah vi, fiz esses testes em menos de 5 minutos, alias, descobri isso por causa dessa thread, valeu. Nao compilei com command line porque eh um saco arrumar classpath a mao para cada versao (eu sei que jah deveria ter batchs prontos para isso, mas...) E como acabou o feriadao, vou ficando por aqui nessa conversa. []'s Silvio Estranho... :-) Tvz isso soh se aplike ao 1.3.x ou superior. Acredito q seja um bug nas versoes anteriores, pq segundo o q eu tb entendo deveria compilar, mas jah faz 6 meses q venho encontrando esses problemas com o 1.1.x e o 1.2 Sobre meu exemplo original: No compilador q vem com o VisualAge 3.02, dah os erros q eu falei (1.1.x)... No meu JDK 1.2, daki de casa, tb dah pau... Alguem podia tentar compilar meu codigo no 1.3??? Pai.java package pai; public class Pai { protected void algo() { } } * Filho.java package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE ACESSO } } } _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.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 para sair da lista: envie email para [EMAIL PROTECTED] -
Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Gozado, consegui testar no 1.3.0 build C e nao compilou tb..., deu o mesmo erro de visibilidade, soh compila se o metodo for declarado public na superclasse ou se eu fizer um overriding em Filho soh pra fazer super.algo(). isso merece mais investigacao. Assim que eu tiver tempo novamente vou testar em outros jdks. Nao sei se vc jogou o codigo exatamente como eu fiz, i. e., EM DOIS PACOTES diferentes, pq no mesmo pacote eu sei q compila mesmo. Se vc puder confirmar isso... sim, coloquei em 2 pacotes separados, mas com a mesma raiz. com.iconos.tests.pacote1 e com.iconos.tests.pacote2 -- 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 para sair da lista: envie email para [EMAIL PROTECTED] -
Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Michael ! mude o modificador de declaracao da classe filha!! como vc quer um construtor publico se a classe é privada... nunca vi isso.. Abraços Carlos Maurício Tecnicamente a documentacao diz o q vc falou, BUT... Erro no meu compilador (1.2.2 - JDK, Sun Microsystems) no teu programa: pacote2\ClasseFilha.java:19: No method matching printProtected(java.lang.String) found i n class pacote2.ClasseFilha. printProtected (chamando 'printProtected'na Inner Class em filha); ^ 1 error Estranho... :-) Tvz isso soh se aplike ao 1.3.x ou superior. Acredito q seja um bug nas versoes anteriores, pq segundo o q eu tb entendo deveria compilar, mas jah faz 6 meses q venho encontrando esses problemas com o 1.1.x e o 1.2 Sobre meu exemplo original: No compilador q vem com o VisualAge 3.02, dah os erros q eu falei (1.1.x)... No meu JDK 1.2, daki de casa, tb dah pau... Alguem podia tentar compilar meu codigo no 1.3??? Pai.java package pai; public class Pai { protected void algo() { } } * Filho.java package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE ACESSO } } } From: [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Date: 6 Jul 2001 07:38:34 -0700 ou eu nao entendi o que vc esta querendo dizer, ou voce cometeu um pequeno engano. uma Inner Class pode chamar metodos protected da super class da classe container, acho que sempre pode, desde a introducao de Inner Classes (JDK 1.1, nao lembro mais ??, mas posso estar errado nesse ponto). o exemplo abaixo compila e executa sem erros. usei JDK 1.3.1 os .java estao no zip. /* * ClasseMae.java * * Created on July 6, 2001, 9:46 AM */ package pacote1; /** * * @author SLD * @version */ public class ClasseMae { /** Creates new ClasseMae */ public ClasseMae() { } public void printPublic(String s) { System.out.println(s); } protected void printProtected(String s) { System.out.println(s); } void printPackage(String s) { // package System.out.println(s); } private void printPrivate(String s) { System.out.println(s); } } /* * ClasseFilha.java * * Created on July 6, 2001, 9:46 AM */ package pacote2; /** * * @author SLD * @version */ public class ClasseFilha extends pacote1.ClasseMae { /** Creates new ClasseFilha */ public ClasseFilha() { printPublic (chamando 'printPublic'na classe filha); printProtected(chamando 'printProtected' na classe filha); // printPackage (chamando 'printPackage' na classe filha); // Erro pq eh de outro pacote // printPrivate (chamando 'printPrivate' na classe filha); // Erro pq eh privada na ClasseMae InnerClass1 inc = new InnerClass1(); } private class InnerClass1 { public InnerClass1() { printPublic (chamando 'printPublic'na Inner Class em filha); printProtected (chamando 'printProtected' na Inner Class em filha); // printPackage (chamando 'printPackage' na Inner Class em filha); // Erro pq eh de outro pacote // printPrivate (chamando 'printPrivate' na Inner Class em filha); // Erro pq eh private na CLasse Mae } } public static void main(String[] s) { ClasseFilha cf = new ClasseFilha(); } } On Fri, 06 July 2001, Michael Santos wrote: Desculpe se vc se sentiu ofendido, mas perguntei qdo vc se certificou pq antes da mudanca de outrubro (ou sera setembro?), todas as perguntas da certificacao NAO DIZIAM QTAS OPCOES ESTAVAM CERTAS e pra mim cairam duas perguntas ressaltando este ponto de acesso a private members. Perguntei qdo pq acho q vc deve ter tirado depois disso e tvz isso tenha feito com q o fato de vc desconhecer este ponto sobre private nao tenha tido tanto peso qto deveria... Isso nao eh bem um erro de compilacao, pq pode levar a erros de modelagem e analise (nao sei se eh isso q vc faz). Se vc quiser ser analista OO, precisa conhecer estes pontos... Mais uma curiosidade pra lista: protected eh uma caixinha de surpresas tb. VC aprende desde o tutorial da Sun: protected permite q as subclasses e as classes do mesmo pacote chamem o metodo. Entao em: package pai; public class Pai { protected void algo() { } } package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE
Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Carlos, o fato da Inner Class ser private nao faz diferenca. Michael, rodei o teu codigo nos seguintes compiladores: jdk 1.1.8_008 jdk 1.2.2_008 jdk 1.3.1 jdk 1.4 (beta) Que sao todas as versoes que eu tenho na minha maquina (para testes de compatibilidade) O teu programa compila em todas as versoes. Usei o JBuilder 4 para os testes. Nesse ponto esse IDE eh realmente muito bom, eh o ambiente mais facil para trocar de JDK que eu jah vi, fiz esses testes em menos de 5 minutos, alias, descobri isso por causa dessa thread, valeu. Nao compilei com command line porque eh um saco arrumar classpath a mao para cada versao (eu sei que jah deveria ter batchs prontos para isso, mas...) E como acabou o feriadao, vou ficando por aqui nessa conversa. []'s Silvio On Sun, 08 July 2001, masterjedi2000 wrote: Michael ! mude o modificador de declaracao da classe filha!! como vc quer um construtor publico se a classe é privada... nunca vi isso.. Abraços Carlos Maurício Tecnicamente a documentacao diz o q vc falou, BUT... Erro no meu compilador (1.2.2 - JDK, Sun Microsystems) no teu programa: pacote2\ClasseFilha.java:19: No method matching printProtected(java.lang.String) found i n class pacote2.ClasseFilha. printProtected (chamando 'printProtected'na Inner Class em filha); ^ 1 error Estranho... :-) Tvz isso soh se aplike ao 1.3.x ou superior. Acredito q seja um bug nas versoes anteriores, pq segundo o q eu tb entendo deveria compilar, mas jah faz 6 meses q venho encontrando esses problemas com o 1.1.x e o 1.2 Sobre meu exemplo original: No compilador q vem com o VisualAge 3.02, dah os erros q eu falei (1.1.x)... No meu JDK 1.2, daki de casa, tb dah pau... Alguem podia tentar compilar meu codigo no 1.3??? Pai.java package pai; public class Pai { protected void algo() { } } * Filho.java package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE ACESSO } } } From: [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Date: 6 Jul 2001 07:38:34 -0700 ou eu nao entendi o que vc esta querendo dizer, ou voce cometeu um pequeno engano. uma Inner Class pode chamar metodos protected da super class da classe container, acho que sempre pode, desde a introducao de Inner Classes (JDK 1.1, nao lembro mais ??, mas posso estar errado nesse ponto). o exemplo abaixo compila e executa sem erros. usei JDK 1.3.1 os .java estao no zip. /* * ClasseMae.java * * Created on July 6, 2001, 9:46 AM */ package pacote1; /** * * @author SLD * @version */ public class ClasseMae { /** Creates new ClasseMae */ public ClasseMae() { } public void printPublic(String s) { System.out.println(s); } protected void printProtected(String s) { System.out.println(s); } void printPackage(String s) { // package System.out.println(s); } private void printPrivate(String s) { System.out.println(s); } } /* * ClasseFilha.java * * Created on July 6, 2001, 9:46 AM */ package pacote2; /** * * @author SLD * @version */ public class ClasseFilha extends pacote1.ClasseMae { /** Creates new ClasseFilha */ public ClasseFilha() { printPublic (chamando 'printPublic'na classe filha); printProtected(chamando 'printProtected' na classe filha); // printPackage (chamando 'printPackage' na classe filha); // Erro pq eh de outro pacote // printPrivate (chamando 'printPrivate' na classe filha); // Erro pq eh privada na ClasseMae InnerClass1 inc = new InnerClass1(); } private class InnerClass1 { public InnerClass1() { printPublic (chamando 'printPublic'na Inner Class em filha); printProtected (chamando 'printProtected' na Inner Class em filha); // printPackage (chamando 'printPackage' na Inner Class em filha); // Erro pq eh de outro pacote // printPrivate (chamando 'printPrivate' na Inner Class em filha); // Erro pq eh private na CLasse Mae } } public static void main(String[] s) { ClasseFilha cf = new ClasseFilha(); } } On Fri, 06 July 2001, Michael Santos wrote: Desculpe se vc se sentiu ofendido, mas perguntei qdo vc se certificou pq antes da mudanca de outrubro (ou sera setembro?), todas as perguntas da
Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Tecnicamente a documentacao diz o q vc falou, BUT... Erro no meu compilador (1.2.2 - JDK, Sun Microsystems) no teu programa: pacote2\ClasseFilha.java:19: No method matching printProtected(java.lang.String) found i n class pacote2.ClasseFilha. printProtected(chamando 'printProtected'na Inner Class em filha); ^ 1 error Estranho... :-) Tvz isso soh se aplike ao 1.3.x ou superior. Acredito q seja um bug nas versoes anteriores, pq segundo o q eu tb entendo deveria compilar, mas jah faz 6 meses q venho encontrando esses problemas com o 1.1.x e o 1.2 Sobre meu exemplo original: No compilador q vem com o VisualAge 3.02, dah os erros q eu falei (1.1.x)... No meu JDK 1.2, daki de casa, tb dah pau... Alguem podia tentar compilar meu codigo no 1.3??? Pai.java package pai; public class Pai { protected void algo() { } } * Filho.java package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE ACESSO } } } From: [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Date: 6 Jul 2001 07:38:34 -0700 ou eu nao entendi o que vc esta querendo dizer, ou voce cometeu um pequeno engano. uma Inner Class pode chamar metodos protected da super class da classe container, acho que sempre pode, desde a introducao de Inner Classes (JDK 1.1, nao lembro mais ??, mas posso estar errado nesse ponto). o exemplo abaixo compila e executa sem erros. usei JDK 1.3.1 os .java estao no zip. /* * ClasseMae.java * * Created on July 6, 2001, 9:46 AM */ package pacote1; /** * * @author SLD * @version */ public class ClasseMae { /** Creates new ClasseMae */ public ClasseMae() { } public void printPublic(String s) { System.out.println(s); } protected void printProtected(String s) { System.out.println(s); } void printPackage(String s) { // package System.out.println(s); } private void printPrivate(String s) { System.out.println(s); } } /* * ClasseFilha.java * * Created on July 6, 2001, 9:46 AM */ package pacote2; /** * * @author SLD * @version */ public class ClasseFilha extends pacote1.ClasseMae { /** Creates new ClasseFilha */ public ClasseFilha() { printPublic (chamando 'printPublic'na classe filha); printProtected(chamando 'printProtected' na classe filha); // printPackage (chamando 'printPackage' na classe filha); // Erro pq eh de outro pacote // printPrivate (chamando 'printPrivate' na classe filha); // Erro pq eh privada na ClasseMae InnerClass1 inc = new InnerClass1(); } private class InnerClass1 { public InnerClass1() { printPublic (chamando 'printPublic'na Inner Class em filha); printProtected(chamando 'printProtected' na Inner Class em filha); // printPackage (chamando 'printPackage' na Inner Class em filha); // Erro pq eh de outro pacote // printPrivate (chamando 'printPrivate' na Inner Class em filha); // Erro pq eh private na CLasse Mae } } public static void main(String[] s) { ClasseFilha cf = new ClasseFilha(); } } On Fri, 06 July 2001, Michael Santos wrote: Desculpe se vc se sentiu ofendido, mas perguntei qdo vc se certificou pq antes da mudanca de outrubro (ou sera setembro?), todas as perguntas da certificacao NAO DIZIAM QTAS OPCOES ESTAVAM CERTAS e pra mim cairam duas perguntas ressaltando este ponto de acesso a private members. Perguntei qdo pq acho q vc deve ter tirado depois disso e tvz isso tenha feito com q o fato de vc desconhecer este ponto sobre private nao tenha tido tanto peso qto deveria... Isso nao eh bem um erro de compilacao, pq pode levar a erros de modelagem e analise (nao sei se eh isso q vc faz). Se vc quiser ser analista OO, precisa conhecer estes pontos... Mais uma curiosidade pra lista: protected eh uma caixinha de surpresas tb. VC aprende desde o tutorial da Sun: protected permite q as subclasses e as classes do mesmo pacote chamem o metodo. Entao em: package pai; public class Pai { protected void algo() { } } package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE ACESSO } } } class OutraClasse { public void algumMetodo() { Filho f = new Filho(); f.algo(); //ERRO DE VISIBILIDADE DE ACESSO } } vc nao espera q ocorram estes erros de compilacao. O segundo, da OutraClasse, parece ateh aceitavel, jah q um metodo
Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Desculpe se vc se sentiu ofendido, mas perguntei qdo vc se certificou pq antes da mudanca de outrubro (ou sera setembro?), todas as perguntas da certificacao NAO DIZIAM QTAS OPCOES ESTAVAM CERTAS e pra mim cairam duas perguntas ressaltando este ponto de acesso a private members. Perguntei qdo pq acho q vc deve ter tirado depois disso e tvz isso tenha feito com q o fato de vc desconhecer este ponto sobre private nao tenha tido tanto peso qto deveria... Isso nao eh bem um erro de compilacao, pq pode levar a erros de modelagem e analise (nao sei se eh isso q vc faz). Se vc quiser ser analista OO, precisa conhecer estes pontos... Mais uma curiosidade pra lista: protected eh uma caixinha de surpresas tb. VC aprende desde o tutorial da Sun: protected permite q as subclasses e as classes do mesmo pacote chamem o metodo. Entao em: package pai; public class Pai { protected void algo() { } } package filho; import pai.*; public class Filho extends Pai { private class InnerClass { public InnerClass() { algo(); //ERRO DE VISIBILIDADE DE ACESSO } } } class OutraClasse { public void algumMetodo() { Filho f = new Filho(); f.algo(); //ERRO DE VISIBILIDADE DE ACESSO } } vc nao espera q ocorram estes erros de compilacao. O segundo, da OutraClasse, parece ateh aceitavel, jah q um metodo protected soh pode ser chamado por outra classe do pacote ONDE ELE FOI DEFINIDO (ninguem fala isso com estas palavras). Agora, esse primeiro, no qual uma InnerClass NAO CONSEGUE CHAMAR UM METODO PROTECTED DA SUPERCLASSE DA OUTERCLASS parece muito bizarro, jah q vc aprende q todos os metodos da outer class (Filho) sao visiveis a InnerClass e algo() eh um metodo da classe Filho por heranca... Bastante bizarro... Mas a solucao pra essa aberracao eh bem simples: package pai; public class Pai { protected void algo() { } } package filho; import pai.*; public class Filho extends Pai { protected void algo() { super.algo(); } private class InnerClass { public InnerClass() { algo(); //COMPILA PERFEITAMENTE } } } class OutraClasse { public void algumMetodo() { Filho f = new Filho(); f.algo(); //COMPILA PERFEITAMENTE } } Coisas do Java... Acho q vou traduzir e mandar pro Java Pitfalls da JavaWorld... :-P Michael Nascimento Santos Sun Certified Programmer for the Java 2 Platform Analista/Consultor Moderador SouJava - www.soujava.org.br CPM Sistemas - www.cpm.com.br From: Edson Tirelli [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Date: Thu, 5 Jul 2001 17:41:15 -0300 Uuups... q viagem... foi mal por essa... Valeu pelo exclarecimento. Como vc pode ver, nunca tinha precisado disso antes. Vou passar a testar o codigo antes de enviar. :P Quanto a minha certificacao, garanto q vale tanto quanto a de qq um. Eh um pedaco de papel q diz q passamos numa prova. Agora na hora do trabalho serio, nao eh ela q vai entregar o sistema funcionando e dentro do prazo... erro de compilacao se resolve em 30 segundos... erro de logica e modelagem, eh outra historia... Abraco, Edson --- Edson Tirelli System Analyst Microsoft Certified Professional Sun Certified Programmer for Java 2 Platform try Automatos @ www.automatos.com -Mensagem original- De: Michael Santos [mailto:[EMAIL PROTECTED]] Enviada em: quinta-feira, 5 de julho de 2001 16:45 Para: [EMAIL PROTECTED] Assunto: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Acho q seu compilador foi escrito pela Microsoft, meu camarada... :-P Isto nao compila nem aki nem na China, tenho certeza absoluta... Nao preciso nem testar, se vc tem: public class A { private int x; } public class B extends A { public B() { x = 1; } } e tentar compilar, vc vai receber ou undefined variable: x ou variable x is not visible to B ou alguma coisa assim... A resposta anterior eh correta... Qdo vc se certificou? Michael Nascimento Santos Sun Certified Programmer for the Java 2 Platform Analista/Consultor Moderador SouJava - www.soujava.org.br CPM Sistemas - www.cpm.com.br From: Edson Tirelli [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: RES: [java-list] Basico de OO em JAVA - CUIDADO Date: Thu, 5 Jul 2001 11:49:59 -0300 Amigos, Este assunto inclusive circulou aqui na lista a um tempo atras. Eh um erro comum q eu tambem cometia no inicio, mas eh importante exclarecer: os modificadores de acesso limitam o ACESSO EXTERNO aos atributos da classe, mas NAO LIMITAM A HERANCA. Isso quer dizer q se uma classe eh FILHA de outra, ela vai HERDAR TUDO da
RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Acho q seu compilador foi escrito pela Microsoft, meu camarada... :-P Isto nao compila nem aki nem na China, tenho certeza absoluta... Nao preciso nem testar, se vc tem: public class A { private int x; } public class B extends A { public B() { x = 1; } } e tentar compilar, vc vai receber ou undefined variable: x ou variable x is not visible to B ou alguma coisa assim... A resposta anterior eh correta... Qdo vc se certificou? Michael Nascimento Santos Sun Certified Programmer for the Java 2 Platform Analista/Consultor Moderador SouJava - www.soujava.org.br CPM Sistemas - www.cpm.com.br From: Edson Tirelli [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: RES: [java-list] Basico de OO em JAVA - CUIDADO Date: Thu, 5 Jul 2001 11:49:59 -0300 Amigos, Este assunto inclusive circulou aqui na lista a um tempo atras. Eh um erro comum q eu tambem cometia no inicio, mas eh importante exclarecer: os modificadores de acesso limitam o ACESSO EXTERNO aos atributos da classe, mas NAO LIMITAM A HERANCA. Isso quer dizer q se uma classe eh FILHA de outra, ela vai HERDAR TUDO da classe MAE, podendo eventualmente sobrescrever algumas coisas (por exemplo, o q NAO estiver definido como final na classe mae). Assim, no exemplo citado pelo colega: public class Mae { private int x; protected int y; } public class Filha extends Mae { // A FILHA HERDA O ATRIBUTO PRIVADO X E O ATRIBUTO PROTEGIDO Y public Filha() { x = 50; // PERFEITAMENTE CORRETO y = 100; // PERFEITAMENTE CORRETO } } Pra tentar exclarecer o modificador private, observe essa nova implementacao abaixo: public class Filha extends Mae { // A FILHA HERDA O ATRIBUTO PRIVADO X E O ATRIBUTO PROTEGIDO Y public Filha() { x = 50; // PERFEITAMENTE CORRETO y = 100; // PERFEITAMENTE CORRETO } public void m() { Mae amae = new Mae(); amae.x = 30; // ERRO DE COMPILACAO - x eh atributo privado de Mae amae.y = 20; // CORRETO - y eh atributo protegido de Mae this.x = 50; // CORRETO - atributo x herdado this.y = 60; // CORRETO - atributo y herdado } } Observe q a diferenca entre atributos privados e protegidos eh q os atributos protegidos permitem o ACESSO EXTERNO quando o objeto q estiver fazendo o acesso for de uma classe FILHA ou DO MESMO PACOTE q a classe q contem o atributo. Espero ter exclarecido, mais do que complicado... :) Abraco, Edson --- Edson Tirelli System Analyst Microsoft Certified Professional Sun Certified Programmer for Java 2 Platform try Automatos @ www.automatos.com -Mensagem original- De: Alexandre Nóbrega Duarte [mailto:[EMAIL PROTECTED]] Enviada em: quinta-feira, 5 de julho de 2001 08:10 Para: [EMAIL PROTECTED] Assunto: Re: [java-list] Basico de OO em JAVA Acho que o que voce quer fazer e isso. public class Mae { private int atributo; public Mae(){ } } public class Filha extends Mae { public Filha() { atributo = 0; } } Se for isso, eh impossivel, mas voce pode contornar este problema fazendo o atributo protected ao inves de private. Dessa forma ele continua a ser privado para quem esta de fora da classe mas fica publico para as classes filhas. public class Mae { protected int atributo; public Mae(){ } } Alexandre Nóbrega Duarte Pós-Graduação em Informática Departamento de Sistemas e Computação Universidade Federal da Paraíba - Original Message - From: Fabio Ferreira To: [EMAIL PROTECTED] Sent: Wednesday, July 04, 2001 5:13 PM Subject: [java-list] Basico de OO em JAVA Como se seta um atributo (private) herdado da classe mae no construtor da classe filha ? Fabio Ferreira _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.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 para sair da lista: envie email para [EMAIL PROTECTED] -
Re: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Oi, Correto... e tentar compilar, vc vai receber ou undefined variable: x ou variable x is not visible to B ou alguma coisa assim... a msg será: x has private access in class A onde A é a superclasse []´s -- Edward Roe -- 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 para sair da lista: envie email para [EMAIL PROTECTED] -
RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO!!!!
Uuups... q viagem... foi mal por essa... Valeu pelo exclarecimento. Como vc pode ver, nunca tinha precisado disso antes. Vou passar a testar o codigo antes de enviar. :P Quanto a minha certificacao, garanto q vale tanto quanto a de qq um. Eh um pedaco de papel q diz q passamos numa prova. Agora na hora do trabalho serio, nao eh ela q vai entregar o sistema funcionando e dentro do prazo... erro de compilacao se resolve em 30 segundos... erro de logica e modelagem, eh outra historia... Abraco, Edson --- Edson Tirelli System Analyst Microsoft Certified Professional Sun Certified Programmer for Java 2 Platform try Automatos @ www.automatos.com -Mensagem original- De: Michael Santos [mailto:[EMAIL PROTECTED]] Enviada em: quinta-feira, 5 de julho de 2001 16:45 Para: [EMAIL PROTECTED] Assunto: RES: [java-list] Basico de OO em JAVA - CUIDADO MESMO Acho q seu compilador foi escrito pela Microsoft, meu camarada... :-P Isto nao compila nem aki nem na China, tenho certeza absoluta... Nao preciso nem testar, se vc tem: public class A { private int x; } public class B extends A { public B() { x = 1; } } e tentar compilar, vc vai receber ou undefined variable: x ou variable x is not visible to B ou alguma coisa assim... A resposta anterior eh correta... Qdo vc se certificou? Michael Nascimento Santos Sun Certified Programmer for the Java 2 Platform Analista/Consultor Moderador SouJava - www.soujava.org.br CPM Sistemas - www.cpm.com.br From: Edson Tirelli [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: RES: [java-list] Basico de OO em JAVA - CUIDADO Date: Thu, 5 Jul 2001 11:49:59 -0300 Amigos, Este assunto inclusive circulou aqui na lista a um tempo atras. Eh um erro comum q eu tambem cometia no inicio, mas eh importante exclarecer: os modificadores de acesso limitam o ACESSO EXTERNO aos atributos da classe, mas NAO LIMITAM A HERANCA. Isso quer dizer q se uma classe eh FILHA de outra, ela vai HERDAR TUDO da classe MAE, podendo eventualmente sobrescrever algumas coisas (por exemplo, o q NAO estiver definido como final na classe mae). Assim, no exemplo citado pelo colega: public class Mae { private int x; protected int y; } public class Filha extends Mae { // A FILHA HERDA O ATRIBUTO PRIVADO X E O ATRIBUTO PROTEGIDO Y public Filha() { x = 50; // PERFEITAMENTE CORRETO y = 100; // PERFEITAMENTE CORRETO } } Pra tentar exclarecer o modificador private, observe essa nova implementacao abaixo: public class Filha extends Mae { // A FILHA HERDA O ATRIBUTO PRIVADO X E O ATRIBUTO PROTEGIDO Y public Filha() { x = 50; // PERFEITAMENTE CORRETO y = 100; // PERFEITAMENTE CORRETO } public void m() { Mae amae = new Mae(); amae.x = 30; // ERRO DE COMPILACAO - x eh atributo privado de Mae amae.y = 20; // CORRETO - y eh atributo protegido de Mae this.x = 50; // CORRETO - atributo x herdado this.y = 60; // CORRETO - atributo y herdado } } Observe q a diferenca entre atributos privados e protegidos eh q os atributos protegidos permitem o ACESSO EXTERNO quando o objeto q estiver fazendo o acesso for de uma classe FILHA ou DO MESMO PACOTE q a classe q contem o atributo. Espero ter exclarecido, mais do que complicado... :) Abraco, Edson --- Edson Tirelli System Analyst Microsoft Certified Professional Sun Certified Programmer for Java 2 Platform try Automatos @ www.automatos.com -Mensagem original- De: Alexandre Nóbrega Duarte [mailto:[EMAIL PROTECTED]] Enviada em: quinta-feira, 5 de julho de 2001 08:10 Para: [EMAIL PROTECTED] Assunto: Re: [java-list] Basico de OO em JAVA Acho que o que voce quer fazer e isso. public class Mae { private int atributo; public Mae(){ } } public class Filha extends Mae { public Filha() { atributo = 0; } } Se for isso, eh impossivel, mas voce pode contornar este problema fazendo o atributo protected ao inves de private. Dessa forma ele continua a ser privado para quem esta de fora da classe mas fica publico para as classes filhas. public class Mae { protected int atributo; public Mae(){ } } Alexandre Nóbrega Duarte Pós-Graduação em Informática Departamento de Sistemas e Computação Universidade Federal da Paraíba - Original Message - From: Fabio Ferreira To: [EMAIL PROTECTED] Sent: Wednesday, July 04, 2001 5:13 PM Subject: [java-list] Basico de OO em JAVA Como se seta um atributo (private) herdado da classe mae no construtor da classe filha ? Fabio Ferreira _ Get Your Private, Free E-mail from MSN Hotmail