Inherence Flashcards

1
Q

Quais modificadores são permitidos em uma herança?

A

Public
default
final (Objetos podem ser finais)
static

Os modificadores abaixo não são permitidos em herança:

protected
private

Classes finais não podem ser herdadas.
Tentar herdar uma classe definida como final vai resultar em um erro de compilação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

O que é o metodo super()?

A

O método super chama o construtor da classe pai.

Assim como o construtor padrão o comando super() é inserido automaticamente caso o programador não o insira.

Pode ser usado para chamar um construtor especifico da classe pai.

super(age,”Gorilla”);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Porque o código abaixo não compila?

public class Zoo {
	public Zoo() {
		System.out.println("Zoo created");
		super();
	}
}
A

O super só poder ser usado em um construtor.
E para isso ele deve ser o primeiro parâmetro do construtor.
Caso contrário o código não compila.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Como chamar um construtor especifico de uma classe pai a partir da classe filha?

A

Usando o método super();

super(age,”Gorilla”);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
Porque o código abaixo não compila?
public class Mammal {	
    public Mammal(int age) { }
}
// Tentativa 1 - Não compila
public class Elephant extends Mammal { }
// Tentativa 2 - Não compila
public class Elephant extends Mammal {
	public Elephant() { 
	}
}
A

Caso o programador redefina o construtor padrão, a classe filha precisa chamar o super e passar os argumentos solicitados pelo novo construtor. Caso contrario a classe filha não compila.

public class Elephant extends Mammal {
	public Elephant() {
		super(10);
	}
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Porque o código abaixo não compila?

public class Camel {
	protected String getNumberOfHumps() {
		return "Undefined";
	}
}
public class BactrianCamel extends Camel {
	private int getNumberOfHumps() {
	return 2;
	}
}
A

Ao sobrescrever um método ele deve ter igual acessibilidade ou maior que o método pai.
Caso contrário o código não compila!

No exemplo existem dois erros. O primeiro é relacionado a acessibilidade.
E o segundo é o retorno. Na classe pai o retorno é String e na classe filho o retorno é inteiro.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

O que acontece ao sobrescrever um método privado?

A

Se o método da classe pai for privado, ele não será sobrescrito. Será criado um novo método na classe filho com mesmo nome.
Este novo método não tem que atender a nenhum dos requisitos do método da classe pai.
Não precisa retornar os mesmos valores e nem precisa ter os mesmos parâmetros.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

O código abaixo compila?

public class Camel {
	private String getNumberOfHumps() {
		return "Undefined";
	}
}
public class BactrianCamel extends Camel {
	private int getNumberOfHumps() {
		return 2;
	}
}
A

O código a compila normalmente. Mas se o método na classe pai fosse public protected ou default o código abaixo não compilaria.

Se o método da classe pai for privado, ele não será sobrescrito. Será criado um novo método na classe filho com mesmo nome.
Este novo método não tem que atender a nenhum dos requisitos do método da classe pai.

Não precisa retornar os mesmos valores e nem precisa ter os mesmos parâmetros.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Um método final pode ser sobrescrito?

A

Não

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Um método static pode ser sobrescrito?

A

Sim!

Se o método na classe pai for static o método na classe filho também precisa ser static.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

O que é uma classe abstrata?

A

Uma classe abstrata fornece variáveis e métodos que podem ser reutilizados pelo desenvolvedor.
É também uma forma de garantir que métodos sejam implementados pela classe filha.

Uma classe abstrata pode conter métodos completos ou incompletos.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Qual a diferença entre classe abstrata e interface?

A

Uma classe abstrata pode conter métodos completos ou incompletos. Uma Interface pode conter apenas a assinatura de um método, mas nenhum corpo ou implementação. Portanto, em uma classe abstrata, pode-­se implementar métodos, mas em uma Interface, não.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Porque o código abaixo não compila?

public class Chicken {	
    public abstract void peck();
}
A

Para um método poder ser abstrato é obrigatório que a classe também seja.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Porque o código abaixo não compila?

public abstract class Turtle {
    public abstract void swim(){}
}
A

Se um método for abstrato ele não pode ter implementação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Porque o código abaixo não compila?

public abstract class Turtle {
    public abstract void swim(){
        return 10;
    }
}
A

Se um método for abstrato ele não pode ter implementação.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Porque o código abaixo não compila?

public abstract class Whale {
	private abstract void sing();
}
A

Um método abstrato não pode ser privado.

Se for privado a classe que estende a classe não terá acesso ao método para implementa-lo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Porque o código abaixo não compila?

public abstract class Whale {
	protected abstract void sing();
}
public class HumpbackWhale extends Whale {
	private void sing() {
		System.out.println("Humpback whale is singing");
	}
}
A

Assim como na herança, a subclasse não pode reduzir a visibilidade do método pai.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Uma classe abstrata pode ser final?

A

Por uma rasão obvia, uma classe abstrata não pode ser final.
Por definição, uma classe abstrata deve ser estendida por outra classe para ser instanciada.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Uma classe abstrata que estende uma outra classe abstrata, é obrigada a implementar seus métodos?

A

Se uma classe abstrata estende outra classe abstrata, ela não é obrigada a implementar os métodos abstratos da classe pai.
Mas se a classe seguinte for uma classe concreta(não abstrata), ela será obrigada a implementar.

20
Q

O que é uma classe concreta?

A

Uma classe concreta é a primeira subclasse que estende uma classe abstrata. Isso quer dizer que é requerido implementar todos os métodos abstratos que ainda não foram implementados.

21
Q

Como implementar múltiplas interfaces em uma classe?

A

Uma classe pode implementar múltiplas interfaces.
Elas devem ser separadas por virgula.

public class Elephant implements WalksOnFourLegs, HasTrunk, Herbivore {
}
22
Q

O que acontece se uma classe implementa duas interfaces que possuem métodos com nomes iguais?

public interface Herbivore {
	public void eatPlants();
}
public interface Omnivore {
	public void eatPlants();
	public void eatMeat();
}
A

Se uma classe herda de duas interfaces que implementa o mesmo método, não existe conflito, pois se a classe que herda implementa o primeiro, automaticamente implementa o segundo.

23
Q

O que acontece se uma classe implementa duas interfaces que possuem assinaturas diferentes?

public interface Herbivore {
	public int eatPlants(int quantity);
}
public interface Omnivore {
	public void eatPlants();
}
A

Se uma classe herda de duas interfaces que implementam o mesmo método mas com assinaturas diferentes, isso não é um problema, já que a sobrecarga de métodos é permitida em java.

Mas neste caso o tipo de retorno é diferente. Portanto o código não compila.

24
Q

O que acontece se uma classe implementa duas interfaces que possuem retornos diferentes?

A

Se uma classe herda de duas interfaces que implementam o mesmo método mas o retorno é diferente, o código não compila, já que não é permitido um método com mesmo nome e retorno diferente em java.

25
Q

É permitido instanciar uma classe abstrata diretamente?

A

Uma classe abstrata não pode ser instanciada diretamente. Assim como acontece com as interfaces.

26
Q

É permitido instanciar uma interface diretamente?

A

Assim como uma classe abstrata uma interface não pode ser instanciada diretamente.

27
Q

Uma interface pode ser declarada sem nenhum método?

A

Uma interface não requer nenhum método. Ou seja pode ser declarada vazia.

public interface WalksOnTwoLegs {} //OK

28
Q

Uma interface pode ser final?

A

Assim como uma classe abstrata, uma interface não pode ser final.

29
Q

Quais são os modificadores permitidos em uma interface?

A

Uma interface pode ser public ou default.

Os outros modificadores são incompatíveis com interfaces. Portanto lançam uma exceção.

30
Q

Uma interface pode ter métodos estáticos?

A

Uma interface pode ter métodos estáticos. El es funcionam de forma idêntica a métodos estáticos de classes comuns.

31
Q

Se uma classe abstrata implementar uma interface, ela é obrigada a implementar os métodos da interface?

A

Uma classe abstrata pode implementar uma interface.
Quando isso acontece a classe abstrata não é obrigada a implementar os métodos da interface, deixando esta obrigação pra classe concreta mais próxima.

32
Q

Porque o código abaixo não compila?

public interface CanRun {}
public class Cheetah extends CanRun {}
A

A prova pode tentar confundir a terminologia.

Uma classe não pode estender uma interface. A palavra reservada extends é especifica de classes abstratas.

33
Q

Porque o código abaixo não compila?

public class Hyena {}
public interface HasFur extends Hyena {}
A

A prova pode tentar confundir a terminologia.

Uma interface não pode estender de uma classe comum.

34
Q

O que é um método default de uma interface?

A

Um a interface define quais métodos abstratos devem ser implementados pelas classes que herdam da interface. Desta forma todo método presente na interface deveria ser implementado pelas classes que herdam deste método.
A partir do java 8 é possível implementar um método default. Desta maneira, as classes que herdam da interface e não implementarem o método, conseguem compilar normalmente.

35
Q

Uma classe normal pode implementar um método default?

A

Um método default só pode ser declarado em uma interface e não com uma classe normal ou classe abstrata.

36
Q

Qual o único modificador permitido para um método default?

A

public

Um método default não pode ser:
static
final
abstract

37
Q

O que acontece quando uma classe estende duas interfaces diferentes que implementam o mesmo método default?

A

Se uma classe estende duas interfaces diferentes que implementam o mesmo método default, o código não compila. A não ser que o método seja sobrescrito!

public interface Walk {
	public default int getSpeed() {
		return 5;
	}
}
public interface Run {
	public default int getSpeed() {
		return 10;
	}
}

public class Cat implements Walk, Run{ } // DOES NOT COMPILE

38
Q

Uma interface pode ser static?

A

Sim!
Por ser static, qualquer variável de interface pode ser acessada mesmo que não exista uma instancia da classe.

public interface CanSwim {
	int MAXIMUM_DEPTH = 100;
	final static boolean UNDERWATER = true;
	public static final String TYPE = "Submersible";
}
39
Q

Quais modificadores são aceitos em em interfaces?

A

Static
public
default
final (Objetos podem ser finais)

Não são aceitos:
Private
Protected

40
Q

Uma interface pode ser final?

A

Sim!
Uma interface final não pode ser estendida por outra interface. Mas pode ser estendida por uma outra classe e implementada normalmente.

41
Q

O código abaixo compila?

public interface A {}
public interface B {}
public interface C extends A, B {}

A

Sim
Uma interface pode estender de outras inerfaces.
Mas vale lembrar que metodos abstratos e classes concretas não podem estender interfaces. Estas podem apenas implementar.

42
Q

O código abaixo compila?

public interface A {}
public interface B {}
public interface C implements A, B {}

A

Não
Uma interface não pode implementar interface.
O implements só pode ser usado em classes concretas.

43
Q

O código abaixo compila?

public interface A {}
public interface B {}
public class D implements A, B {}
A

Sim
Uma classe concreta pode implementar uma interface.
Apenas classes concretas podem usar o implements.

44
Q

O código abaixo compila?

public interface A {}
public interface B {}
public class D extends A, B {}
A

Não

Apenas interfaces podem estender interface. Uma classe concreta pode implementar uma interface.

45
Q

O código abaixo compila?

public interface A {}
public interface B {}
public interface C extends A, B {} 
public class E implements C {}
A

Sim

Uma classe concreta pode implementar uma ou mais interfaces.

46
Q

O código abaixo compila?

public interface A {}
public interface B {}
public class D implements A, B {} 
public abstract class F extends D {}
A

Sim

Uma classe abstrata pode estender uma classe concreta.

47
Q

O código abaixo compila?

public interface A {}
public interface B {}
public abstract class F extends A, B {}
A

Não
Uma classe abstrata não pode estender uma interface.
Use implements neste caso.