dúvidas em questoes Livro da Kathy - cap. 10

org
  | -- Robot.class
  |
  | -- ex
        |-- Pet.class
        |
        |-- why
              |-- Dog.class

And the following source file:

class MyClass { 
  Robot r;
  Pet p;
  Dog d;
}

Which statement(s) must be added for the source file to compile? (Choose all that appl
A.  package org;
B.  import org.;
C.  package org.
;
D.  package org.ex;
E.  import org.ex.*;
F.  package org.ex.why;
G.  package org.ex.why.Dog;

Resposta: B, E e F

B e E ok, mas, por que é a F e não a G??? Se fosse no netbeans eu importaria da maneira da G.

foo
  |
  test 
     |
     xcom
        |--A.class
        |--B.java

And these two files:

package xcom;
public class A { }

package xcom;
public class B extends A { }

Which allows B.java to compile? (Choose all that apply.) 
A.  Set the current directory to xcom then invoke
javac B.java
B.  Set the current directory to xcom then invoke
javac -classpath . B.java
C.  Set the current directory to test then invoke
javac -classpath . xcom/B.java
D.  Set the current directory to test then invoke
javac -classpath xcom B.java
E.  Set the current directory to test then invoke
javac -classpath xcom:. B.java

Resposta: C
Mas ao chamar javac -classpath . xcom/B.java eu nao estaria procurando A.java no diretorio atual (test)???

  1. Given three files:
package xcom;
public class A {
  // insert code here 
}

package xcom;
public class B extends A {public void doB() { System.out.println("B.doB"); } }

import xcom.B;
class TestXcom {
  public static void main(String[] args) {
    B b = new B();  b.doB();  b.go();
  }
}

Which, inserted at  // insert code here will allow all three files to compile? (Choose all  
that apply.)
A.  void go() { System.out.println(“a.go”); }
B.  public void go() { System.out.println(“a.go”); }
C.  private void go() { System.out.println(“a.go”); }
D.  protected void go() { System.out.println(“a.go”); }
E.  None of these options will allow the code to compile

Resposta: B is correct. The public access modifier is the only one that allows code from outside
a package to access methods in a package - regardless of inheritance.

Mas A e B não estão no mesmo pacote???

Abraços e valeu
João Sávio

[quote=joaosavio]2.

Resposta: B, E e F

B e E ok, mas, por que é a F e não a G??? Se fosse no netbeans eu importaria da maneira da G.[/quote]
Como disse em sua resposta, “importaria” e a declaração é de pacote e não importação. Assim, a F esta certa e a G errada, a G estaria certa se fosse import.

Obs: Não cheguei a ler as outras questões, quando eu ler, posto mais!

Abraços!

Feliz 2009 XD

essas 3 perguntinhas ai são boas em…

a 1ª fiquei sem entender… se eu estiver localizado no ultimo pacote da hierarquia não preciso fazer um import daquels q estão acima de mim? so daqueles q estão abaixo? tipo no caso da letra F…
a letra G esta erada pq vc esta tentando empacotar dentro da Classe Dog ^^

a 2ª a letra C esta certa… esta procurando no diretorio atual “.” e no diretorio “xcom/”

a 3ª as Classes A e B estão no mesmo pacote mais a classe TestXcom não… ok? por isso tem o import xcom.B; certo?
dai a letra B esta correto pq o metodo e publico… acesso geral pra galera… ^^
agora na minha cabecinha a letra D tamebm funcionava =( pq eh protected e estou acessando por herança, certo?
não poderia fazer assim new A().go(); mas do jeito q esta funciona, não?

caralho confundi ainda mais a pergunta XD

Esta declaração seria de import, não de package.

Ele não procura A.java, ele procura A.class

  • A.java é o código-fonte, A.class são os bytecodes.

Na classe TestXCom você só pode acessar se o método go() se for público, porque ele está em outro pacote!

[quote=diegosantiviago]
Na classe TestXCom você só pode acessar se o método go() se for público, porque ele está em outro pacote![/quote]

Com o protected eu consigo acessar de outro pacote desde q seja por herança, certo?

ainda estou confusso nisso… alguem mais poderia opinar?

Sim, mas você está acessando a partir de outra classe, da classe TestXcom

[quote=diegosantiviago]2.

Esta declaração seria de import, não de package.

Ele não procura A.java, ele procura A.class

  • A.java é o código-fonte, A.class são os bytecodes.

Na classe TestXCom você só pode acessar se o método go() se for público, porque ele está em outro pacote![/quote]

Entao, mas o A.class não está no diretório xcom??? E nao no atual!
Quando chamo javac -classpath . xcom/B.java o classpath está definido no diretório atual (test) ok?