0

是否有可能重载子类的构造函数,因为我一直在绞尽脑汁,我真的想不通。以下是到目前为止我的全部代码和问题。

这是学校作业,但没有评分,因为我们将在几周后进行概念考试,所以我正在努力完成尽可能多的练习。

练习 4 - 重载构造函数

我们注意到大多数计算机实验室的容量为 20。

为只有一个参数的 ComputerLab 类编写一个新的构造函数,房间号,并将容量初始化为 20。我们现在将重载 ComputerLab 类的构造函数,以便有两种方法来创建该类的实例。

Week7.java:

package week7;


public class Week7 {
    /*
     * @param args the command line arguments
     */

    public static void main(String[] args) {
        Room nonTech = new Room("t12", 25, true);
        System.out.println("nonTech");
        System.out.println(nonTech.getRoomNumber());
        System.out.println(nonTech.getCapacity());
        System.out.println(nonTech.hasProjector());

        ComputerLab tech = new ComputerLab("r12", 10, true, "win7");
        System.out.println();
        System.out.println("tech");
        System.out.println(tech.getRoomNumber());
        System.out.println(tech.getCapacity());
        System.out.println(tech.hasProjector());
        System.out.println(tech.getOS());

        // hasProjector == false however it will also return true due 
        //to the override method lower down
        LectureRoom mainhall = new LectureRoom("somthing", 100, false);
        System.out.println();
        System.out.println("mainhall");
        System.out.println(tech.hasProjector());

    }
}

class Room {

    String roomNumber;
    int capacity;
    boolean projection;

    public Room(String rm, int n, boolean p) {
        roomNumber = rm;
        capacity = n;
        projection = p;
    }

    public String getRoomNumber() {
        return roomNumber;
    }

    public int getCapacity() {
        return capacity;
    }

    public boolean hasProjector() {
        return projection;
    }
}

class ComputerLab extends Room {
    // RoomNumber, capacity, projection inherited

    private String os;

    public ComputerLab(String rm, int n, boolean p, String os) {
        super(rm, n, p);
        this.os = os;
    }

    public String getOS() {
        return os;
    }

    public void setOS(String update) {
        os = update;
    }

}

class LectureRoom extends Room {
    // RoomNumber, capacity, projection inherited

    public LectureRoom(String rm, int n, boolean p) {
        super(rm, n, p);
    }

    // Overrides Superclass hasProjector
    public boolean hasProjector() {
        return true;
    }
}
4

1 回答 1

0

您需要为将ComputerLab设置为 20 的类添加一个构造函数capacity

public ComputerLab(String roomNumber) {
    super(roomNumber, 20, false); // is false the correct default value?
    this.os = null; // what is the correct default value?
}

super这里调用超类构造函数(Room在这种情况下),因此您将所需的参数传递给它。在这种特定情况下,您的ComputerLab实例是Room带有房间号roomNumber(新ComputerLab构造函数的参数)、容量设置为20和投影设置为的实例false

于 2014-03-15T13:48:14.097 回答