Java 如何在超类构造函数中具有特定条件?

Java 如何在超类构造函数中具有特定条件?,java,inheritance,interface,Java,Inheritance,Interface,在构造函数超类中创建if语句时遇到问题,因为当我创建sub类类型的对象时,我的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

在构造函数超类中创建if语句时遇到问题,因为当我创建sub类类型的对象时,我的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;
}

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

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

此处
如果(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;    
}
此处
如果(年份>1950)
年份
只能值为
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;    
}
这个
if(year>1950)
应该是
if(y>1950)
。这个
if(year>1950)
应该是
if(y>1950)