Я работаю на классической программе домашнее задание и не могу за жизнь мне понять, почему моя статическая переменная суперкласса реагирует так, как это делает ..Статическая переменная суперкласса действующего странно в подклассе порождений
программа - это банковский счет, где я создал суперкласс, учетную запись и два подкласса, CreditAccount и SavingsAccount.
public abstract class Account {
private double balance;
private int accountId;
**private static int lastAssignedNumber = 1000;** <--- the static int
private String accountType;
public Account (double q_balance, String q_accountType)
{
balance = q_balance;
accountType = q_accountType;
**accountId = ++lastAssignedNumber; <------ counter for new accountId**
}
)
public class CreditAccount extends Account {
public CreditAccount(double balance)
{
super(balance, "Creditaccount");
}
}
public class SavingsAccount extends Account {
public SavingsAccount(double balance)
{
super(balance, "Savingsaccount");
}
}
Раньше без подклассов, когда Счет был единственным объектом, счетчик работал красиво. Но теперь, когда я создаю новые объекты SavingsAccount и creditaccounts программа действует очень странно, и возвращает accountnumbers следующим образом:
new SavingsAccount(0); // **1001**
new CreditAccount(0); // **1001**
new CreditAccount(0); // **1002**
new SavingsAccount(0); // **1003**
new CreditAccount(0); // **1002**
new CreditAccount(0); // **1004**
new SavingsAccount(0); // **1005**
Что в имени богов происходит ?! Что мне не хватает? Разве два подкласса не должны вызывать одну и ту же статическую переменную 'lastAssignedNumber' и соответственно добавлять к ней?
сердечного привет // Gewra
Вы используете несколько потоков? Операторы pre и post-increment не являются атомарными, поэтому операции, выполняемые для нескольких потоков, могут чередовать и создавать неожиданные результаты, подобные этим. –
Возможно, вы должны синхронизировать их. – 2013-02-25 20:46:40
Можете ли вы опубликовать, где вы на самом деле создаете эти различные учетные записи, а также как вы извлекаете их 'accountId'? – asteri