Insert six modifiers into the code such that it meets all of these requirements:
- It must be possible to create instances of Alpha and Beta from outside the package in which they are defined.
- When an object of type Alpha (or any potential subclass of Alpha) has been created, the instance variable alpha may never be changed.
- The value of the instance variable alpha must always be “A” for objects of type Alpha.
[code]package alpha;
_____ class Alpha{
_______ String alpha;
_______ Alpha(){ this(“A”); }
_______ Alpha(String a){ alpha = a;}
}[/code]
package beta;
_______ class Beta extends alpha.Alpha{
____ Beta(String a){ super(a); }
}
Os modificadores permitidos eram o private, public e protected. A minha solução foi a seguinte:
[code]package alpha;
public class Alpha{
private String alpha;
public Alpha(){ this(“A”); }
_______ Alpha(String a){ alpha = a;}
}[/code]
package beta;
public class Beta extends alpha.Alpha{
public Beta(String a){ super(a); }
}
Para satisfazer a condição 2, coloquei um private na variável alpha. Para satisfazer a condição 1, coloquei o modificador public em ambas as classes (para estas serem visíveis de fora do pacote), bem como coloquei o construtor de Beta como public (pois era o único construtor presente nesta classe). Também coloquei o construtor Alpha() como public, para satisfazer a condição 1 de criar objetos fora do pacote.
Agora, com relação à condição 3, não consigo achar uma solução. Se eu coloco private no construtor Alpha(String a), a classe Beta não vai ter acesso à ele (veja que a classe Beta está chamando esse construtor pelo super(a); ) Se eu coloco public, não satisfaz a condição de que objetos alpha deveriam sempre ter o valor “A” na variável String (pois eu poderia chamar o construtor de alpha como, por exemplo Alpha a = new Alpha(“B”);. Caso eu coloque ele como protected eu resolvo o problema da chamada de super pela classe Beta, porém, isso irá me permitir criar um objeto Alpha com o campo “alpha” diferente de “A”!!! (Desde que esteja dentro do mesmo pacote, claro).
Ou seja, acho que esse problema não tem solução! O que vcs acham? Eu errei em algo?