Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的方法不打印子类中的对象?_Java_Arrays_Object_Methods_Subclass - Fatal编程技术网

Java 为什么我的方法不打印子类中的对象?

Java 为什么我的方法不打印子类中的对象?,java,arrays,object,methods,subclass,Java,Arrays,Object,Methods,Subclass,这是我的阵列: public class TestProgram { public static final Room[] rooms = new Room[] { new Room ("GARDEN0001", "NorthWest Garden View", 45.0), new PremiumRoom ("POOL0001", "Poolside Terrace", 90.0, 1, 150, 50),

这是我的阵列:

public class TestProgram {

    public static final Room[] rooms = new Room[]
        {
            new Room ("GARDEN0001", "NorthWest Garden View", 45.0),
            new PremiumRoom ("POOL0001", "Poolside Terrace", 90.0, 1, 150, 50),
            new Room ("GARDEN0003", "North Garden View", 35.0),
            new Room ("GARDEN0005", "West Garden View", 35.0),
            new PremiumRoom ("POOL0002", "Poolside Private", 125.0, 2, 100, 75),
            new Room ("GARDEN0004", "South Garden View", 52.0)
        };
}
这是我的方法:

private static void displayrooms() {
    rooms[0].print();
    System.out.println();
    rooms[1].print();
    System.out.println();
    rooms[2].print();
    System.out.println();
    rooms[3].print();
    System.out.println();
    rooms[4].print();
    System.out.println();
    rooms[5].print();
}
但是,当它打印出列表时,它会跳过PremiumRooms对象。我如何解决这个问题?premiumroom是Room的子类

这是它的输出,缺少2 premiumroom对象:

Room ID: GARDEN0001 Description: NorthWest Garden View Daily-Rate: 45.0 Status: A Room ID: GARDEN0003 Description: North Garden View Daily-Rate: 35.0 Status: A Room ID: GARDEN0005 Description: West Garden View Daily-Rate: 35.0 Status: A Room ID: GARDEN0004 Description: South Garden View Daily-Rate: 52.0 Status: A
这取决于你的打印方法。如果您的Room类与下面的类似,则
displayrooms()
方法也将打印PremiumRooms

public class Room {

    private String roomId;
    private String description;
    private double dailyRate;
    private char status;

    public Room(String roomId, String description, double dailyRate) {
        this.roomId = roomId;
        this.description = description;
        this.dailyRate = dailyRate;
        this.status = 'A';
    }

    public void print() {
        StringBuilder str = new StringBuilder();

        str.append("Room ID: ").append(roomId).append("\n")
                .append("Description: ").append(description).append("\n")
                .append("Daily-Rate: ").append(dailyRate).append("\n")
                .append("Status: ").append(status);

        System.out.println(str.toString());
    }
}
但是,它将忽略Premium Room类中的任何其他字段。我也希望包括它,您需要覆盖PremiumRoom类中的print方法,如

public class PremiumRoom extends Room {

    private int freeNights;
    private double discountRate;
    private double nextBookingDiscountVoucher;

    public PremiumRoom(String roomId, String description, double dailyRate, int freeNights, double discountRate, double nextBookingDiscountVoucher) {
        super(roomId, description, dailyRate);
        this.freeNights = freeNights;
        this.discountRate = discountRate;
        this.nextBookingDiscountVoucher = nextBookingDiscountVoucher;
    }

    public void print() {
        super.print();
        StringBuilder str = new StringBuilder();

        str.append("Free Nights: ").append(freeNights).append("\n")
                .append("Discount Rate: ").append(discountRate).append("\n")
                .append("Voucher: ").append(nextBookingDiscountVoucher);

        System.out.println(str.toString());
    }
}
像这样调用

public class TestProgram {

    public static final Room[] rooms = new Room[] {
            new Room("GARDEN0001", "NorthWest Garden View", 45.0),
            new PremiumRoom("POOL0001", "Poolside Terrace", 90.0, 1, 150, 50),
            new Room("GARDEN0003", "North Garden View", 35.0),
            new Room("GARDEN0005", "West Garden View", 35.0),
            new PremiumRoom("POOL0002", "Poolside Private", 125.0, 2, 100, 75),
            new Room("GARDEN0004", "South Garden View", 52.0) 
    };

    private static void displayrooms() {
        rooms[0].print();
        System.out.println();
        rooms[1].print();
        System.out.println();
        rooms[2].print();
        System.out.println();
        rooms[3].print();
        System.out.println();
        rooms[4].print();
        System.out.println();
        rooms[5].print();
    }

    public static void main(String[] args) {
        displayrooms();
    }
}

共享
PremiumRoom
类源?请显示
print
方法的代码,并显示
Room
的代码和
PremiumRoom
类(如何实现
PremiumRoom.print()
?此外,您正在执行至少5x
println()
,因此您将有5个换行符,即两个空行。如果没有,我们会看到错误的代码。我们没有要求构造函数的代码。我们要求提供类的代码,特别是字段定义和相关的
print
方法,以及该代码所指的任何其他内容。print方法在哪里?yeap!这就是我认为的错误。premiumroom类没有正确编写方法。谢谢你的帮助!:)
public class TestProgram {

    public static final Room[] rooms = new Room[] {
            new Room("GARDEN0001", "NorthWest Garden View", 45.0),
            new PremiumRoom("POOL0001", "Poolside Terrace", 90.0, 1, 150, 50),
            new Room("GARDEN0003", "North Garden View", 35.0),
            new Room("GARDEN0005", "West Garden View", 35.0),
            new PremiumRoom("POOL0002", "Poolside Private", 125.0, 2, 100, 75),
            new Room("GARDEN0004", "South Garden View", 52.0) 
    };

    private static void displayrooms() {
        rooms[0].print();
        System.out.println();
        rooms[1].print();
        System.out.println();
        rooms[2].print();
        System.out.println();
        rooms[3].print();
        System.out.println();
        rooms[4].print();
        System.out.println();
        rooms[5].print();
    }

    public static void main(String[] args) {
        displayrooms();
    }
}