在Java中是否可以给父类中的子类赋值?
我为此搜索了很多,但在任何地方都找不到,但是如果你认为以前有人问过,请将链接发送给我 我有一个名为chesspiece的父类,我有6个子类: 值为1的典当, 价值为2的骑士, 值为3的Bishop, 值为5的Rook, 价值9的女王 和价值1000的国王 我有两个实例变量:值和工件的颜色 我想知道有没有可能说,如果你的值为1,你属于典当类,或者如果你的值为2,你属于骑士类。 所以,现在我用一个方法来做这件事,但它只返回一个字符串,别的什么也没有。这是我的密码:在Java中是否可以给父类中的子类赋值?,java,parent-child,Java,Parent Child,我为此搜索了很多,但在任何地方都找不到,但是如果你认为以前有人问过,请将链接发送给我 我有一个名为chesspiece的父类,我有6个子类: 值为1的典当, 价值为2的骑士, 值为3的Bishop, 值为5的Rook, 价值9的女王 和价值1000的国王 我有两个实例变量:值和工件的颜色 我想知道有没有可能说,如果你的值为1,你属于典当类,或者如果你的值为2,你属于骑士类。 所以,现在我用一个方法来做这件事,但它只返回一个字符串,别的什么也没有。这是我的密码: public class Ches
public class ChessPiece {
private boolean isWhite;
private int value;
public ChessPiece (boolean isWhite, int value) {
this.isWhite = isWhite;
this.value = value;
}
public String getNamebyValue() {
switch (value) {
case 1:
return "Pawn";
case 2:
return "Knight";
case 3:
return "Bishop";
case 5:
return "Rook";
case 9:
return "Queen";
case 1000:
return "King";
}
return null;
}
这是我的儿童课:
public class Bishop extends ChessPiece {
public Bishop(boolean isWhite) {
super(isWhite, 3);
}
建议:
ChessPiece.java
public class ChessPiece {
private boolean isWhite;
private int value;
private String name;
public ChessPiece (boolean isWhite) {
this.isWhite = isWhite;
}
public String getName() { return name; }
}
public class Bishop extends ChessPiece {
public Bishop(boolean isWhite) {
super(isWhite);
this.name = "Bishop";
this.value = 3;
}
...
}
Bishop.java
public class ChessPiece {
private boolean isWhite;
private int value;
private String name;
public ChessPiece (boolean isWhite) {
this.isWhite = isWhite;
}
public String getName() { return name; }
}
public class Bishop extends ChessPiece {
public Bishop(boolean isWhite) {
super(isWhite);
this.name = "Bishop";
this.value = 3;
}
...
}
换句话说,让“类继承”为您做尽可能多的工作
回答您的问题:可以在父类和子类之间共享一个变量(如上所示)
也可以覆盖子对象中的成员变量。看这里:
这完全取决于您的设计—取决于您的需求,以及您选择如何实现这些需求。在这种情况下,请更改
getNamebyValue()
,如下所示:
public ChessPiece getNamebyValue() {
switch (value) {
case 1:
return new Pawn();
case 2:
return new Knight();
case 3:
return new Bishop();
case 5:
return new Rook()";
case 9:
return new Queen();
case 1000:
return new King();
}
return null;
}
并创建子类,如您为Bishop所示。您可以这样做,但不是按照您的编码方式 我建议让该方法返回一种棋子类型而不是字符串,然后通过调用该方法和一个数字来实例化该类型
public class ChessPiece {
private boolean isWhite;
private int value;
public ChessPiece (boolean isWhite, int value) {
this.isWhite = isWhite;
this.value = value;
}
public ChessPiece getNamebyValue(int value) {
switch (value) {
case 1:
return new Pawn();
break;
case 2:
return new Knight();
break;
case 3:
return new Bishop();
break;
case 5:
return new Rook();
break;
case 9:
return new Queen();
break;
case 1000:
return new King();
break;
default:
return new ChessPiece();
break;
}
return null;
}
然后
ChessPiece cp= new getNameByValue(1000);
这将返回一个King类型的对象
此外,如果您的开关中没有break语句,它只会在遍历每个语句时返回最后一个值,直到出现break为止 你不应该为每种棋子类型下国际象棋,它们之间没有足够的区别。改用
enum
public class ChessPiece {
private boolean isWhite;
private ChessPieceType pieceType;
enum ChessPieceType {
Pawn(1),
Knight(2),
Bishop(3),
//...
King(1000);
private int value;
private ChessPieceType(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
public ChessPiece (ChessPieceType type, boolean isWhite) {
this.pieceType = type;
this.isWhite = isWhite;
}
public ChessPieceType getPieceType() {
return this.pieceType;
}
}
使用
如果我理解正确,您可能希望查看工厂设计模式您将发送一个函数“recipe”来创建您的对象(在您的情况下是值),并返回一个适当的对象它只返回一个字符串您还希望得到什么?确切的问题是什么?你想返回一个
类
实例吗?这意味着如果它是1,那么返回类型应该是类Pawn的对象?那么,在构造函数中可以这样做吗?mohd shoaib我想知道是否可以说,如果你的值为1,你属于Pawn类,或者如果你的值为2,你属于knight classIt听起来你想要的是一个enum
。如果这没有任何break语句,它不是每次都返回一个King吗?一个包含所有case语句的return语句将保护这一点。如果没有匹配项,则只返回null。如果找到匹配项,则应立即出现break
语句。是否使用Javabreak
不是一种方法(break()
)你是对的。我编辑了它。我不知道我是怎么忘记的。PS:我不确定“value”成员有多大价值(如果一个棋子有一个“type”,比如“Bishop”,那么“value=3”有什么意义?)。但我喜欢盖伊的建议。如果您需要“value”,那么“enum”比“int”更好(更合适)。