Dúvidas - Questoes SCJA

Irei fazer a prova daqui alguns dias, mas gostaria de tirar umas duvidas… me ajudem por favor!

public class Foo{

    public static void main(){
         System.out.println("Hello");
    }

}

c) An exception occurs at rutntime when class Foo is invoked with the command line java Foo
d) The class Foo will run successfully when invocaked with the command line java Foo, and will print “Hello”

Gostaria de saber por que a C é a correta… e nao a D, porque ?

—SEGUNDA QUESTÃO—


interface A{
    void someMethod();
}

class B implements A{
    public void someMethod(){}
}

Wich represents the “program to an interface” principle:

a) public B make() {return new A();}
b) public A make() {return new B();}
c) public B make() {return new B();}
d) public A make() {return new A();}

Resposta: B

Eu não entendi essa questão, podem me ajudar por favor ?

Muito obrigado!


Qual a diferença entre “SEM O PUBLIC e com o PUBLIC?”


interface A{
void play();
public void record();

}

class B implements A{
    void play();
    public void record();

}

1 - Qual a diferença entre usar o PUBLIC e NAO o USA-LO ?
2 - E para a classe B vai fazer alguma diferença ?

[quote=diegofss11]Irei fazer a prova daqui alguns dias, mas gostaria de tirar umas duvidas… me ajudem por favor!

public class Foo{

    public static void main(){
         System.out.println("Hello");
    }

}

c) An exception occurs at rutntime when class Foo is invoked with the command line java Foo
d) The class Foo will run successfully when invocaked with the command line java Foo, and will print “Hello”

Gostaria de saber por que a C é a correta… e nao a D, porque ?

—SEGUNDA QUESTÃO—


interface A{
    void someMethod();
}

class B implements A{
    public void someMethod(){}
}

Wich represents the “program to an interface” principle:

a) public B make() {return new A();}
b) public A make() {return new B();}
c) public B make() {return new B();}
d) public A make() {return new A();}

Resposta: B

Eu não entendi essa questão, podem me ajudar por favor ?

Muito obrigado!


Qual a diferença entre “SEM O PUBLIC e com o PUBLIC?”


interface A{
void play();
public void record();

}

class B implements A{
    void play();
    public void record();

}

1 - Qual a diferença entre usar o PUBLIC e NAO o USA-LO ?
2 - E para a classe B vai fazer alguma diferença ?[/quote]

E ai cara tudo bom? Toda interface seus métodos sao por padrao publics e abstratos entao mesmo vc nao definindo explicitamente que sao publics eles sao. Quando sua class “concreta” “B” implementou “A” ela tem que definir um corpo para o método play() e seu modificador de acesso tb deverá ser “public”, vc nao pode diminuir a visibilidade do método da sua interface se nao vai ocorrer um erro de compilaçao.

Hummm… entendi essa :smiley:

E as outras , pode dar uma maozinha :smiley:

Vlw!!

Quanto á sua segunda questão :

[code]interface A{
void someMethod();
}

class B implements A{
public void someMethod(){}
}

interface A{
void someMethod();
}

class B implements A{
public void someMethod(){}
}

Wich represents the “program to an interface” principle:

a) public B make() {return new A();}
b) public A make() {return new B();}
c) public B make() {return new B();}
d) public A make() {return new A();}
[/code]

Não entendi a pergunta porém as alternativas “B e C” funcionam.

A alternativa “A” nao funciona pq vc nao pode dar new A() por que “A” é uma interface e nao pode ser instanciada, e tambem porque “A” não passta no teste E-UM “B”.
A alternativa “B” funciona, vc esta usando um retorno “covariante”, onde “B” passa no teste E-UM “A”.
A alternativa “C” funciona, o retorno pode ser um “B” ou algo que passe no teste E-UM “B”.
A alternativa “D” nao funciona pelo mesmo motivo de que vc nao pode instanciar uma interface, a nao ser criando uma classe anonima.

[quote=diegofss11]Irei fazer a prova daqui alguns dias, mas gostaria de tirar umas duvidas… me ajudem por favor!

public class Foo{

    public static void main(){
         System.out.println("Hello");
    }

}

c) An exception occurs at rutntime when class Foo is invoked with the command line java Foo
d) The class Foo will run successfully when invocaked with the command line java Foo, and will print “Hello”

Gostaria de saber por que a C é a correta… e nao a D, porque?[/quote]
Veja o que a alternativa C fala. Vai acontecer uma exception em tempo de execução quando a classe Foo é chamada com o comando “java Foo”. Isso vai acontecer porque Foo não tem um método principal. Ela tem um método main, mas não é o main procurado pela JVM pra executar a classe. O correto seria:

public class Foo{

    public static void main(String[] args)){
         System.out.println("Hello");
    }

}

Sobre public, leia sobre modificadores de acesso, presentes no livro da Kathy do SCJP ou em qualquer documentação da Sun / Oracle.

Hummm… Obrigado gente, a primeira e terceira questão eu entendi :smiley:

Mas a segunda ainda não… nao entrou isso na minha cabeça =/

A questão de nao criar uma nova instancia de uma interface está beleza… eliminei com isso a A e a D, mas a diferença entre a B e a C eu nao saquei ainda =/

[quote=diegofss11]Hummm… Obrigado gente, a primeira e terceira questão eu entendi :smiley:

Mas a segunda ainda não… nao entrou isso na minha cabeça =/

A questão de nao criar uma nova instancia de uma interface está beleza… eliminei com isso a A e a D, mas a diferença entre a B e a C eu nao saquei ainda =/[/quote]

Veja só:

[code]public interface A{}
public class B implements A{

public A teste(){

return new B();

}

public B teste1(){

return new B();

}

}[/code]

Nesse exemplo podemos falar que a class “B” É-UM “A” ou “B” é filho de “A” porque “B” esta implementando “A” ok?

Sendo assim vejamos os métodos:

[code]public A teste(){

return new B(); // esse método pode retornar um objeto do tipo “A” ou algo que IMPLEMENTA “A”. Nesse caso “B” implementa “A”? SIM. Então logo “B” É-UM “A” e o retorno é valido.
}
[/code]

[code]public B teste1(){

return new B(); // esse método pode retornar um objeto do tipo “B” ou algo que SEJA(Herde) de “B”. Como ele esta retornando um objeto “B” o método também é valido.

}[/code]

humm… mas tipo na resposta tá falando que é a B, somente ela

Pois é, nao entendi a pergunta que vc colocou ai “Wich represents the “program to an interface” principle:”.

Mas se olhar para o lado de o que compila e o que não compila, á resposta seria “B e C”.

Se for interpretar para o lado de principios de interfaces, á resposta seria á “B” mesmo porque se trata do uso de polimorfismo.

Pois é, nao entendi a pergunta que vc colocou ai “Wich represents the “program to an interface” principle:”.

Mas se olhar para o lado de o que compila e o que não compila, á resposta seria “B e C”.

Se for interpretar para o lado de principios de interfaces, á resposta seria á “B” mesmo porque se trata do uso de polimorfismo.[/quote]

Aa sim, agora entendi… ce tem razão!

A B e a C funcionam… mas a que usa principio de interface( no caso o polimorfismo), é somente a B.

Muito obrigado!

Obrigado à todos!