импорт класса в java

Должен ли я импортировать класс Java, если класс, который я импортирую, находится в том же пакете, что и класс, в который я импортирую (я пытаюсь расширить прежний класс, и SavingAccount, и SpecialSavings находятся в одной учетной записи)? Также я пытаюсь получить доступ к частной переменной в моем родительском классе из подкласса, но это не позволит мне. Вот мой код:

package finance;

import finance.SavingsAccount;

public class SpecialSavings extends SavingsAccount
{

    public SpecialSavings(double savingsBalance) 
    {
        super.setBalance(savingsBalance);
    }

    if (super.getBalance() > 10000)
    {
        modifyInterestRate(10);
    }

}

Вот код SavingsAccount:

 package finance;

 public class SavingsAccount 
 {
private static double annualInterestRate;
private double savingsBalance;//indicates the amount the saver currently has on deposit

public SavingsAccount(double savingsBalance)//default constructor
{
    this.savingsBalance = savingsBalance;
}


public double calculateMonthlyInterest() 
{
    savingsBalance += savingsBalance * ((annualInterestRate/100)/12);
    return savingsBalance;
}

public static void modifyInterestRate(double newValue)
{
    annualInterestRate = newValue;
}
/*-------------getters and setters------------------------*/
public void setBalance(double newValue)
{
    savingsBalance = newValue;
}

public double getBalance()
{
    return savingsBalance;
}



 }

person dave    schedule 15.05.2011    source источник
comment
покажи код для SavingsAccount, это тоже homework если да то добавь его как тег.   -  person    schedule 15.05.2011


Ответы (4)


  1. Вам не нужно импортировать классы из того же пакета.
  2. Вы не можете получить доступ к частной переменной класса из другого класса (если только это не внутренний класс). Если вы хотите, чтобы переменная была видна для подклассов, используйте protected, а не private.

Кроме того, вы пытаетесь вызвать super.getBalance() вне какого-либо блока, что является незаконным, вы должны переместить его в какой-то свой метод. Например, пример:

public void modify()
{
    if (super.getBalance() > 10000)
    {
        modifyInterestRate(10);
    }
}
person MByD    schedule 15.05.2011
comment
я использую общедоступные геттеры? ты можешь не делать этого? - person dave; 15.05.2011
comment
Вы можете сделать это с геттерами, но не напрямую. если x является закрытым членом someclass, то - someclass.getX() в порядке. someclass.x нет. - person MByD; 15.05.2011
comment
следующая спецификация уже сделала метод родительских классов закрытым, поэтому я не могу его изменить. поэтому я использую геттеры и сеттеры, как вы можете видеть в приведенном выше коде. - person dave; 15.05.2011
comment
хорошо, поэтому eclipse дает мне это сообщение об ошибке. Неявный суперконструктор SavingsAccount() не определен. Должен явно вызывать другой конструктор - person dave; 15.05.2011
comment
Это другая проблема. И вместо того, чтобы писать это в комментарии, прочитайте это: particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter04/ - person MByD; 15.05.2011

Нет. Все классы в вашем пространстве имен видны и могут использоваться без их явного импорта.

person Chris Eberle    schedule 15.05.2011

Чтобы получить доступ к переменным super class, создайте переменную protected, но лучшим решением будет создать переменную protected setter/getters для этой переменной экземпляра private и использовать ее вместо нее.

person Community    schedule 15.05.2011

Есть 3 access modifier

  1. Частный
  2. Защищено
  3. Общественный

И 4 access control

  1. Частный
  2. По умолчанию
  3. Охраняемый 4 Публичный

Поскольку вы используете тот же пакет, НЕТ НУЖНОСТИ ИМПОРТИРОВАТЬ.

И поскольку вы хотите получить доступ к частному члену родительского класса из его подкласса, это недопустимо. Если этот подкласс находится в том же пакете, вы можете сделать член родительского класса, к которому вы хотите получить доступ, по умолчанию (т. е. не записывать никаких модификаторов доступа), или если подкласс находится вне Родительский пакет, затем используйте защищенный или общедоступный.

person Kumar Vivek Mitra    schedule 29.06.2012