【问题标题】:importing a class in java在java中导入一个类
【发布时间】:2011-05-15 04:45:16
【问题描述】:

如果我要导入的类与我要导入的类在同一个包中,我是否应该导入一个 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;
}



 }

【问题讨论】:

  • 显示SavingsAccount的代码,如果是这样,也可以将其添加为标签。

标签: java class import


【解决方案1】:
  1. 您不需要从同一个包中导入类。
  2. 你不能从不同的类访问一个类的私有变量(除非它是一个内部类)如果你想让一个变量对子类可见,使用protected,而不是private

另外,你试图在任何块之外调用super.getBalance(),这是非法的,你应该把它移到你的某个方法中。对于示例

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

【讨论】:

  • 我使用的是公开的 getter?你不能那样做吗?
  • 你可以用 getter 来做,但不能直接做。如果 xsomeclass 的私有成员,则 - someclass.getX() 可以。 someclass.x 不是。
  • 下面的规范已经将父类方法设为私有,所以我不能修改它。所以我正在使用 getter 和 setter,正如您在上面的代码中看到的那样
  • 好的,所以 Eclipse 给了我这个错误信息。 “隐式超级构造函数 SavingsAccount() 未定义。必须显式调用另一个构造函数”
  • 这是一个不同的问题。而不是在评论中写下 - 请阅读:particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter04/…
【解决方案2】:

没有。命名空间中的所有类都是可见且可用的,无需显式导入它们。

【讨论】:

    【解决方案3】:

    要访问super class 变量,请创建protected,但更好的解决方案是为该private 实例变量创建protected setter/getters,然后使用它们。

    【讨论】:

      【解决方案4】:

      3 access modifier

      1. 私人
      2. 受保护
      3. 公开

      还有4 access control

      1. 私人
      2. 默认
      3. 受保护 4 公开

      由于您在同一个包中,因此无需导入

      而当你想从它的子类中访问父类私有成员,那非法。 如果该子类在同一个包中,您可以将要访问的父类的成员设为默认(即不编写任何访问修饰符),或者如果子类在父包,然后使用受保护的或公共的。

      【讨论】:

        猜你喜欢
        • 2011-03-11
        • 1970-01-01
        • 2019-08-21
        • 1970-01-01
        • 1970-01-01
        • 2016-11-05
        • 2011-02-24
        • 2014-05-27
        相关资源
        最近更新 更多