Classe Abstrata( Polimorfismo ) [ Resolvido ]

Srs, bom dia!

Eu tenho três classes na minha aplicação, são elas: ATM, Screen e Transaction. Á classe Screen tem função de registrar entrada de dados realizada pelo usuário. Á Transaction é uma classe do tipo abstract em função de um método execute que é utilizado em outras classes concretas.

Meu problema e seguinte, eu estou tentando criar uma referência na classe Transaction para Screen, mas não estou tendo sucesso.

public abstract class Transaction
{
   private int accountNumber; // indicates account involved
   private Screen screen; // ATM's screen
   
   // Transaction constructor 
   public Transaction( int userAccountNumber, Screen atmScreen )
   {
      
      screen = new Screen();
      
      
   } //end 

Eu fiz exatamente o mesmo procedimento, mas entre ás classes ATM e Screen. Está funcionando perfeitamente.

public class ATM 
{
   private boolean userAuthenticated; // whether user is authenticated
   private int currentAccountNumber; // current user's account number
   private Screen screen; // ATM's screen
   private Keypad keypad; // ATM's keypad
   private CashDispenser cashDispenser; // ATM's cash dispenser
   private DepositSlot depositSlot; // ATM's deposit slot
   private BankDatabase bankDatabase; // account information database

   // no-argument ATM constructor initializes instance variables
   public ATM() 
   {
      userAuthenticated = false; // user is not authenticated to start
      currentAccountNumber = 0; // no current account number to start
      screen = new Screen(); // create screen
      keypad = new Keypad(); // create keypad 
      cashDispt = new DepositSlot(); // create deposit slot
      bankDatabenser = new CashDispenser(); // create cash dispenser
      depositSloase = new BankDatabase(); // create acct info database
   } // end no-argument ATM constructor

Minha questão é: não é permitido referenciar e invocar um objeto dentro de de uma classe do tipo “abstract”?

Você usou o modificador de acesso private, então tudo que está com esse modificador existe apenas dentro da classe. Caso queira que outras classes acessem esses atributos, é necessário marca-los public ou protected ou criar os famosos métodos get/set.

ErickRAR, bom dia!

Obrigado por responder. Eu penso que essa não seja a questão. Como eu comentei, na classe ATM eu tenho uma variável do tipo referencia que tem nome “screen” onde eu estou faço referencia á classe Screen. Se você observar Screen é do tipo private e funciona perfeitamente. Eu ainda penso que existe alguma particularidade quando estamos tratando tal procedimento com uma classe abstrata.

Ah sim, você quer criar uma Transaction e passar uma referencia para screen? se for isso o problema está no seu construtor:

[code] public Transaction( int userAccountNumber, Screen atmScreen )
{

screen = new Screen(); //Errado! você está passando um nova referencia para screen e ignorando o atmScreen.
this.screen = atmScreen; //Correto! você está passando para screen a referencia que recebeu no parametro do construtor

}[/code]

De resto não altera mesmo. A única coisa é que não dá para instanciar uma classe abstrata.

ErickRAR,

show de bola! Isso mesmo que eu gostaria de saber: " não dá para instanciar uma classe abstrata" mas eu não estava sabendo como fazer quando trata-se de uma classe abstrata. Muito obrigado!