我有一艘战舰作为父类(super class)
扫雷舰和巡洋舰是战列舰的子级。
在Battleship 类中我有一个名为hit 的方法,并且该方法在Minesweeper 类中被重写。但是,当我尝试访问 Cruiser 类的战舰中的“hit”方法时,它会转到扫雷类中的“hit”方法。
战列舰级:
public class Battleship
{
private Part[] part;
public Battleship(int row, int sizeofTheShip)
{
part = new Part[sizeofTheShip];
for(int i=0; i< sizeofTheShip; i++)
{
part[i] = new Part(row,i);
}
}
public boolean hit(int row, int column)
{
Part newpart = new Part(row,column);
for(int i=0; i<part.length;i++)
{
if (part[i].equals(newpart))
{
part[i].setDestroyed(true);
return true;
}
}
return false;
}
巡洋舰级:
public class Cruiser extends Battleship
{
public Cruiser(int row)
{
super(row,4);
}
}
扫雷类:
public class Minesweeper extends Battleship
{
public Minesweeper(int row)
{
super(row,2);
}
@Override
public boolean hit(int row, int column)
{
double random = Math.random();
if (random > 0.5)
{
super.hit(row, column);
return true;
}
else
{
return false;
}
}
}
董事会类别:
public class Board
{
private ArrayList<Battleship> battleships = new ArrayList<Battleship>();
public Board()
{
battleships.add(new Battleship(0,5));
battleships.add(new Cruiser(1));
battleships.add(new Minesweeper(2));
}
public boolean hit(int row, int column)
{
for (Battleship b: battleships)
{
if (b.hit(row, column) == true)
{
return true;
}
}
return false;
}
如果有不清楚的地方,请在评论中告诉我,我将编辑帖子以使其更有意义
感谢您的宝贵时间
最佳答案
断言被证明是错误的:
import java.util.ArrayList;
public class Board {
private ArrayList<Battleship> battleships = new ArrayList<Battleship>();
public Board() {
battleships.add(new Battleship("Battleship", 0, 5));
battleships.add(new Cruiser("Cruiser", 1));
battleships.add(new Minesweeper("Minesweeper", 2));
}
public boolean hit(int row, int column) {
for (Battleship b : battleships) {
if (b.hit(row, column) == true) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Board board = new Board();
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
board.hit(i, j);
}
}
}
}
class Battleship {
private Part[] part;
private String name;
public Battleship(String name, int row, int sizeofTheShip) {
this.name = name;
part = new Part[sizeofTheShip];
for (int i = 0; i < sizeofTheShip; i++) {
part[i] = new Part(row, i);
}
}
public boolean hit(int row, int column) {
System.out.printf("%s: %s%n", getName(), "From Battleship");
Part newpart = new Part(row, column);
for (int i = 0; i < part.length; i++) {
if (part[i].equals(newpart)) {
part[i].setDestroyed(true);
return true;
}
}
return false;
}
public String getName() {
return name;
}
}
class Cruiser extends Battleship {
public Cruiser(String name, int row) {
super(name, row, 4);
}
}
class Minesweeper extends Battleship {
public Minesweeper(String name, int row) {
super(name, row, 2);
}
@Override
public boolean hit(int row, int column) {
System.out.printf("%s: %s%n", getName(), "From Minesweeper");
double random = Math.random();
if (random > 0.5) {
super.hit(row, column);
return true;
} else {
return false;
}
}
}
class Part {
private int row;
private int i;
private boolean destroyed;
public Part(int row, int i) {
this.row = row;
this.i = i;
}
public void setDestroyed(boolean destroyed) {
this.destroyed = destroyed;
}
public int getRow() {
return row;
}
public int getI() {
return i;
}
public boolean isDestroyed() {
return destroyed;
}
@Override
public String toString() {
return "Part [row=" + row + ", i=" + i + ", destroyed=" + destroyed + "]";
}
}
输出:
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Minesweeper: From Battleship
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
Battleship: From Battleship
Cruiser: From Battleship
Minesweeper: From Minesweeper
巡洋舰的所有命中方式均来自战列舰
所以你的问题的直接答案:
Are Overriden methods in the subclass used for other subclass?
没有。您在某种程度上误解了数据。
关于java - 子类中的重写方法是否用于其他子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41093551/