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

#java #class #import

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

Вопрос:

Должен ли я импортировать класс Java, если класс, который я импортирую, находится в том же пакете, что и класс, в который я импортирую (я пытаюсь расширить первый класс, оба SavingsAccount и 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;
}



 }
  

Комментарии:

1. покажите код для SavingsAccount , также это homework , если да, добавьте его в качестве тега.

Ответ №1:

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

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

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

Комментарии:

1. я использую общедоступные методы получения? разве вы не можете этого сделать?

2. Вы можете сделать это с помощью методов получения, но не напрямую. если x является закрытым членом someclass , то — someclass.getX() нормально. someclass.x это не так.

3. следующая спецификация уже сделала метод родительских классов закрытым, поэтому я не могу его изменить. итак, я использую методы получения и установки, как вы можете видеть в приведенном выше коде

4. итак, eclipse выдает мне это сообщение об ошибке. «Неявный суперконструктор SavingsAccount() не определен. Необходимо явно вызвать другой конструктор»

5. Это другая проблема. И вместо того, чтобы писать это в комментарии — прочитайте это: particle.kth.se /~lindsey/JavaCourse/Book/Часть 1 /Java/Глава 04/…

Ответ №2:

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

Ответ №3:

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

Ответ №4:

Существуют 3 access modifier

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

И 4 access control

  1. Частное
  2. По умолчанию
  3. Защищенный 4 общедоступный

Поскольку вы находитесь в том же пакете, нет НЕОБХОДИМОСТИ ИМПОРТИРОВАТЬ.

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