java - 子类中的重写方法是否用于其他子类?

标签 java

我有一艘战舰作为父类(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/

相关文章:

java - H2 数据库 : how to protect with encryption, 不暴露文件加密 key

java - Java 编程难题的内存管理

java - 使用kura框架,连接BLE设备时如何指定地址类型为 "random static"

java - 如何在 java 中打印 Hijrah 月份?

java - Java 中的 Spark sql 选择和减少

java - 如何检查字符串是否包含大写java

java - 无法访问类 jdk.xml.internal.JdkXmlUtils

java - 调整图像大小以缩小其所在的面板/标签

java - 多模块 Maven 项目中的不同构建结果

java - 我可以在 Google App Engine 上使用 HikariCP