exercÍcio certificaÇÃo programador

11 respostas
jesley.sena

Rapaziada estou tendo PROBLEMAS com a interpretação de um exercício sobre o MODIFICADOR PROTECTED.

O exercício é exatamente o seguinte: Guia Completo de Estudos para Certificação em Java 2 "...Comece criando uma superclasse pública chamada Bird, em um pacote chamado birdpack. Essa superclasse deve ter um único membro de dados: int protegido chamado nFeathers. Depois, crie um quatro subclasses de Bird, todas residindo em um pacote chamado duckpack. Assim, você terá subclasses, cujo pacote é diferente do pacote de sua superclasse; essa é exatamente a situação para a qual o acesso protegido pe destinado." (O código abaixo sou eu que comecei a fazer).
package birdpack;

public class Bird {

	protected int nFeathers; 
	
}
"A primeira subclasse, chamada Duck1, deve ter um método que acesse a variável nFeathers da instância atual de Duck1. Antes de compilar Duck1, pergunte-se se o código deve compilar."(O código abaixo sou eu que comecei a fazer).
package duckpack;
import birdpack.Bird;

public class Duck1 extends Bird{

A 1ª dúvida: Quando ele fala em "...deve ter um método que acesse a variável nFeathers da instância atual de Duck1."
Eu tenho que criar outra variável na classe Duck1?
Instância Atual é a própria Duck1?
Como acessar a variável protegida em Bird?

11 Respostas

kinow

Olá Jesley, protected torna a variável visível apenas através de herança. Então você acessará a variável nFeathers normalmente, ela terá sido inicializada com 0, tudo ok, porém se você instanciar a classe Bird em uma das suas subclasses,

E tentar acessar nFeathers através do objeto urubuMalvado, com o .nFeathers, você receberá em sua tela completamente grátis um erro de compilação, porque você não pode acessar variáveis protected por instancia, apenas por herança, don’t forget it. Abraços cara. espero ter ajudado.

kinow

Segue um código de exemplo para você. :wink: abraços, e qualquer dúvida, estamos ae.

/*
 * Created on 16/08/2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.claro.cert;

/**
 * @author Bruno Kinoshita
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class Bird {
	
	protected int nFeathers;

	/**
	 * 
	 */
	public Bird() {
		super();
		// TODO Auto-generated constructor stub
	}

}
/*
 * Created on 16/08/2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.claro.cert1;

import com.claro.cert.Bird;

/**
 * @author Bruno Kinoshita
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class PiuPiu extends Bird{

	/**
	 * 
	 */
	public PiuPiu() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	public void print()
	{
		System.out.println(this.nFeathers);
	}
	
	public static void main(String[] args) {
		PiuPiu p  = new PiuPiu();
		p.print();
	}

}
Maicolino

Pelo q eu entendi, você deve criar um metodo que cria uma instancia da propria classe Duck1 e acessar a variavel dessa instancia criada:

package duckpack;
import birdpack.Bird;

public class Duck1 extends Bird{

   void teste() {
      Duck1 d1 = new Duck1();
         System.out.println("Valor: " + d1.nFeathers);
   }

}

Q na minha opinião irá compilar normalmente, pois o atributo
nFeathers, virou private na classe Duck1 e pode ser acessado normalmente por ela mesma!

R

Estranho isso. Então, se uma classe tenta acessar um atributo protected, um erro de compilação será gerado?!

kinow

O programa não será compilado, por não encontrar variável. Abraços.

kinow

A não ser por herança hehehehe. Default = package, protected = default + herança, private apenas a Classe e public qualquer Classe, mesmo externa e sem herança.

pcalcado

Por favor, veja em qual seção seu tópico se adequa antes de
postar. Quanto mais organizado, mais fácil de achar respostas. Dessa
vez eu movi para você :wink:

Luca

Olá

Não existe este modificador com letras maiúsculas. Não existe este modificador com letras maiúsculas. Não existe este modificador com letras maiúsculas. Não existe este modificador com letras maiúsculas.

Fui chato repetindo? Pois é, assim que me sinto lendo mensagens em maiúsculas.

Para quem como eu com mais de 35 anos de informática e quase 20 anos usando mainframe onde só tinha letras maiúsculas para ler e escrever, nada pior do que ler mensagens berradas em maiúsculas.

[]s
Luca

kinow

Desculpas qualquer coisa :?: :frowning:

Luca

Olá

Oi Bruno, desculpa eu, minha bronca não foi contigo!

[]s
Luca

kinow

Uff, hehehe, abraços…

Criado 16 de agosto de 2005
Ultima resposta 17 de ago. de 2005
Respostas 11
Participantes 6