如何在超类构造函数中包含特定条件?

时间:2017-11-10 18:23:18

标签: java inheritance interface

我在构造函数超类中创建if语句时遇到问题,因为当我创建一个sub class类型的对象时,my year变量初始化为零。有人可以帮我找出问题吗?

public abstract class Ship implements Floatable {

private String name;
private int year;

public Ship(String n, int y) {
    if(year > 1950)
        year = y;
    else 
        year = 0;
    name = n;

}

//子类的代码

public class CruiseShip extends Ship {

private int maxPsg; //max number of passengers
public CruiseShip(String name, int year, int max) {
    super(name, year);
    maxPsg = max;
}

2 个答案:

答案 0 :(得分:2)

此处if(year > 1950)year只能被声明为0,因为它被声明为:

private int year; // 0 value by default

你永远不会重视它。

你想写的可能是:

public Ship(String n, int y) {
    if(n > 1950)
        year = y;
    else 
        year = 0;
    name = n;    
}

但由于int字段默认初始化为0,因此您可以简化为:

public Ship(String n, int y) {
    if(n > 1950)
        year = y;
    name = n;    
}

答案 1 :(得分:0)

您需要将if(year > 1950)更改为if(y > 1950)否则条件将永远不会变为真,因为默认情况下year被初始化为零,因为它是一个实例字段。< / p>