2 - Considera o diagrama UML em baixo, e depois indica, justificando, quais das seguintes instruções são válidas e quais são inválidas. As instruções são independentes umas das outras, e naquelas que não implicam criação de objetos presume-se que o(s) objeto(s) em questão já foram instanciados. Considera-se que todas as instruções ocorrem fora das classes presentes no diagrama.
Animal animal = new Dog();
Cat cat = new Dog();
Cat cat = new Animal();
a.Bark(); // 'a' é uma instância de Animal
dog.Eat(); // 'dog' é uma instância de Dog
float y = tareco.energy; // 'tareco' é uma instância de Cat
Console.WriteLine(myCat.Name); // 'myCat' é uma instância de Cat
bobi.energy = 123.4f; // 'bobi' é uma instância de 'Dog'
Dog pluto = new Animal();
y.Meow(); // 'y' é uma instância de Cat
beast.Bite(); // 'beast' é uma instância de Animal
zz.Eat(); // 'zz' é uma instância de Cat
Animal animal = new Dog();
Válida. Isto é possível porque Dog
é um Animal
, sendo assim
possível guardar uma instância de Dog
em uma variável de tipo Animal
.
Cat cat = new Dog();
Inválida. Isto não é possível porque Dog
não é um Cat
, sendo
assim, não é possível guardar uma instância de Dog
em uma variável de tipo
Cat
.
Cat cat = new Animal();
Inválida. Esta instrução não é possível sendo que não podemos guardar uma
instância de Animal
em uma variável do tipo Cat
, pois Animal
pode não ser um Cat
.
a.Bark(); // 'a' é uma instância de Animal
Inválida. Animal
não contém o método Bark()
.
dog.Eat(); // 'dog' é uma instância de Dog
Válida. Dog
têm o método Eat()
, de visibilidade public
, derivado da classe
base Animal
.
float y = tareco.energy; // 'tareco' é uma instância de Cat
Inválida. A variável energy
é de visibilidade protected
, sendo impossível
aceder através de uma instância de Cat
. Esta instrução ocorre fora
da classe Cat
ou Animal
, e a variável não pode ser acedida a não ser que
seja dentro das próprias classes.
Console.WriteLine(myCat.Name); // 'myCat' é uma instância de Cat
Válida. A variável Name
, com visibilidade public
, vem da classe base
Animal
.
bobi.energy = 123.4f; // 'bobi' é uma instância de 'Dog'
Inválida. Tal como na outra instrução, a variável energy
é de visibilidade
protected
, sendo impossível aceder através de uma instância de Dog
. Esta
instrução ocorre fora da classe Dog
ou Animal
, e a variável não pode ser
acedida a não ser que seja dentro das próprias classes.
Dog pluto = new Animal();
Inválida. Este caso é igual ao caso anterior de Cat cat = new Animal();
. Esta
instrução não é possível sendo que não podemos guardar uma instância de Animal
em uma variável do tipo Dog
, pois Animal
pode não ser um Dog
.
y.Meow(); // 'y' é uma instância de Cat
Válida. O método Meow()
, com visibilidade public
, está contido na classe
Cat
.
beast.Bite(); // 'beast' é uma instância de Animal
Inválida. A classe Animal
não contém o método Bite()
.
zz.Eat(); // 'zz' é uma instância de Cat
Válida. O método Eat()
, com visibilidade public
, é derivado da classe base
Animal
.
Por Inácio Amerio