【问题标题】:Java cannot find symbol: constructor errorJava 找不到符号:构造函数错误
【发布时间】:2011-08-13 09:10:28
【问题描述】:

我正在编写一个继承自另一个类 (HotelRoom) 的类 (Suite)。 HotelRoom 类有一个构造函数,它需要一个参数(一个 int),因此在 Suite 的构造函数中,我调用了 super(room),据我所知,它应该可以工作。 HotelRoom 符合要求,但 Suite 给出了构造函数错误。任何帮助将不胜感激。下面是我的代码:

public class HotelRoom
{
    private int roomNumber;
    protected double nightlyRate;
    private final int maxRoomNumber = 999;
    boolean didEnterCorrectRoomNumber = false;

    public HotelRoom(int room)
    {

        if (room > 0 && room <= 299)
        {
            nightlyRate = 69.95;
            didEnterCorrectRoomNumber = true;
            //return didEnterCorrectRoomNumber;
        }
        else if (room > 299 && room <= maxRoomNumber)
        {
            nightlyRate = 89.95;
            didEnterCorrectRoomNumber = true;
            //return didEnterCorrectRoomNumber;
        }
        else
        {
            //return didEnterCorrectRoomNumber;
        }
    }

    public int getRoomNumber ()
    {
        return roomNumber;
    }

    public double getNightlyRate ()
    {
        return nightlyRate;
    }
    public boolean getDidEnterCorrectRoomNumber ()
    {
        return didEnterCorrectRoomNumber;
    }

    public void displayRoom ()
    {
        System.out.println("Room Number: " + roomNumber);
        System.out.format("Cost per Night: $%.2f%n", nightlyRate);
    }

}

和我的子类:

public class Suite extends HotelRoom
{
    private final double suiteSurchargeRate = 40.00;
    private double nightlyRateWithSuite;

    public Suite (int room)
    {
        super(room);
        //boolean didEnterCorrectRoomNumber = super.getDidEnterCorrectRoomNumber();
        nightlyRateWithSuite = super.getNightlyRate() + suiteSurchargeRate;
        //return didEnterCorrectRoomNumber;
    }

    public void displayRoom ()
    {
        super.displayRoom();
        System.out.format("Suite Surcharge: $%.2f%n", suiteSurchargeRate);
        System.out.format("Total Cost per Night: $%.2f%n", nightlyRateWithSuite);
    }

}

确切的编译器错误:

MacBook-Air:HotelRoom Nick$ javac Suite.java Suite.java:12:找不到符号 符号:构造函数 HotelRoom(int) 地点:类HotelRoom 超级(房间); ^ 1 个错误

我已经保存并重新编译了几次,我得到了相同的结果。 HotelRoom 可以正常编译,但 Suite 不能。它们是其目录中仅有的两个 java 文件,因此调用错误的类没有问题。 :)

【问题讨论】:

  • 您可以发布您收到的错误消息文本吗?
  • 您发布的代码编译良好。我怀疑你在没有 super(room) 时遇到了这个错误。
  • 代码对我来说看起来不错。您确定在编译 Suite 之前没有忘记重新编译 HotelRoom 吗?或者您在其他地方没有其他 HotelRoom 课程吗?编译器的确切错误信息是什么?
  • 第一次在这里发帖,所以不确定我是否应该编辑我的第一篇文章或对其发表评论,所以我会两者兼而有之。确切的编译器错误:MacBook-Air:HotelRoom Nick$ javac Suite.java Suite.java:12: 找不到符号 symbol : constructor HotelRoom(int) location: class HotelRoom super(room); ^ 1 个错误我已经保存并重新编译了几次,但我得到了相同的结果。 HotelRoom 可以正常编译,但 Suite 不能。它们是其目录中仅有的两个 java 文件,因此调用错误的类没有问题。 :)
  • 您的类路径中必须有一些旧的 HotelRoom 类。尝试删除 .class 文件,并同时编译这两个文件:javac HotelRoom.java Suite.java

标签: java inheritance constructor compiler-errors


【解决方案1】:

我认为这与您在 Mac 上的 Java 设置有关。在运行 Linux 的 PC 上使用 Java 1.6 它可以编译并运行良好,并使用以下 Main 类进行了测试

public class Main {
    public static void main(String[] args) {        
        Suite suite = new Suite(10);
        suite.displayRoom();    
    }
}

输出:

Room Number: 0
Cost per Night: $69.95
Suite Surcharge: $40.00
Total Cost per Night: $109.95

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2010-10-05
    • 2018-04-13
    相关资源
    最近更新 更多