Java Can';t在接口的子类中实现方法

Java Can';t在接口的子类中实现方法,java,interface,polymorphism,Java,Interface,Polymorphism,我知道这是家庭作业,所以听起来很奇怪。现在我正试图消除一个编译错误,即池必须实现抽象方法。Pool由Beyard接口实现,而deck是Pool的子类,护柱是deck的子类。我不允许更改驾驶员类中显示输出方法中的代码,也不允许更改甲板或护柱中的代码。编译器坚持要求我重新编码池中的所有子类方法,或者使池抽象,但我也不能这样做。我到底需要修复什么。如果我真的需要编写后院接口中的所有get方法,请告诉我 以下是驾驶员等级: public class YardOrders { //Con

我知道这是家庭作业,所以听起来很奇怪。现在我正试图消除一个编译错误,即池必须实现抽象方法。Pool由Beyard接口实现,而deck是Pool的子类,护柱是deck的子类。我不允许更改驾驶员类中显示输出方法中的代码,也不允许更改甲板或护柱中的代码。编译器坚持要求我重新编码池中的所有子类方法,或者使池抽象,但我也不能这样做。我到底需要修复什么。如果我真的需要编写后院接口中的所有get方法,请告诉我

以下是驾驶员等级:

public class YardOrders 
{
        //Constants
        final static int POOL_ONLY = 1;
        final static int POOL_N_DECK=2;
        final static int POOL_DECK_N_BOLLARD=3;
        final static int DISPLAY_ORDERS=4;
      final static int DEFAULT_INT=0;

      //Methods
        public static void main(String[] args) 
        {
            int numberOfOrders=DEFAULT_INT;
            BackYard backYard[] = new BackYard[100];
            int selection = DEFAULT_INT;
             do
             {
                 selection = Integer.parseInt(JOptionPane.showInputDialog(null,       
                            "Options:\nEnter "+ POOL_ONLY +" for a pool.\n" +                               
                            "Enter "+ POOL_N_DECK +
                            " for a pool and a concrete " +
                            "deck surrounding the pool.\n"+
                            "Enter "+POOL_DECK_N_BOLLARD+" for a pool," +
                            " deck, and bollards.\n"+
                            "Enter "+DISPLAY_ORDERS+" to display orders and exit.",
                            "Pool Options", JOptionPane.PLAIN_MESSAGE));
                    if(selection > DEFAULT_INT && selection < DISPLAY_ORDERS)
                    {

                            getPoolInput(backYard,numberOfOrders,selection);
                            numberOfOrders++;
                            System.out.println(numberOfOrders);
                    }
                    else if(selection==DISPLAY_ORDERS)
                    {
                        displayOrders(backYard,numberOfOrders);
                        System.out.println(numberOfOrders);
                        System.exit(DEFAULT_INT);
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null,"Invalid input. Values" +
                    " must be between 1 and 4.");
                    }
             }while(selection != DISPLAY_ORDERS);                                                   
        }     

        private static void getPoolInput(BackYard backYard[],int numberOfOrders,int selection)
        {
            //Pool attributes
            String lastName = JOptionPane.showInputDialog(null,
                    "Enter last name.\n","Last Name",
                    JOptionPane.PLAIN_MESSAGE);

            String firstName = JOptionPane.showInputDialog(null,
                    "Enter first name.","First Name",
                    JOptionPane.PLAIN_MESSAGE);

            double poolDepth = Double.parseDouble(
                    JOptionPane.showInputDialog(null,
                    "Enter pool depth in inches.","Pool Depth",
                    JOptionPane.PLAIN_MESSAGE)); //In inches.

            double poolDiameter = Double.parseDouble(
                    JOptionPane.showInputDialog(null,
                    "Enter pool diameter in feet.","Pool Diameter",
                    JOptionPane.PLAIN_MESSAGE));//In feet.
            if(selection == POOL_ONLY)
            {
              //Pool instantiation.

                backYard[numberOfOrders]= new Pool(lastName,firstName,
                            poolDepth,poolDiameter);
            }
            else
            {
                getDeckInput(backYard, 
                                numberOfOrders,selection,
                                        lastName,firstName,
                                        poolDepth, poolDiameter);
            }

        }//End of method

        private static void getDeckInput(BackYard[] backYard, 
                                                                         int numberOfOrders, int selection,
                                                                        String lastName, String firstName,
                                                                         double poolDepth, double poolDiameter)
        {
            //Deck attributes
            double deckLength=Double.parseDouble(
                    JOptionPane.showInputDialog(null,
                    "Enter deck length in feet.","Deck Length",
                    JOptionPane.PLAIN_MESSAGE));

            double deckWidth= Double.parseDouble(
                    JOptionPane.showInputDialog(null,
                    "Enter deck width in feet.","Deck Width",
                    JOptionPane.PLAIN_MESSAGE));
            if(selection==POOL_N_DECK)
            {

                backYard[numberOfOrders]= new Deck(lastName,firstName,
                                                                    poolDepth,poolDiameter,
                                                             deckLength,deckWidth);

            }
            else
            {
                getBollardInput(lastName,firstName,
                                                poolDepth,poolDiameter,
                                                deckLength,deckWidth);
            }
        }
        public static void getBollardInput(String lastName, String firstName,
                                                                         double poolDepth, double poolDiameter,
                                                                         double deckLength, double deckWidth)
        {
            //Bollard attributes
            double bollardHeight=Double.parseDouble(
                JOptionPane.showInputDialog(null,
                "Enter bollard height in inches.","Bollard Height",
                JOptionPane.PLAIN_MESSAGE));

            double bollardDiameter=Double.parseDouble(
                JOptionPane.showInputDialog(null,
                "Enter bollard diameter in incehs.","Bollard Diameter",
                JOptionPane.PLAIN_MESSAGE));

            int numberOfBollards=Integer.parseInt(
                JOptionPane.showInputDialog(null,
                "Enter the number of bollards.","Number of bollards",
                JOptionPane.PLAIN_MESSAGE));

            //Bollard instantiation
            Bollards bollards= new Bollards(lastName,firstName,
                    poolDepth,poolDiameter,
                    deckLength,deckWidth,
                    bollardHeight, bollardDiameter,
                    numberOfBollards);
        }

        private static void displayOrders(BackYard[] orders, int numberOfOrders)
        {
            DecimalFormat dec3 = new DecimalFormat("0.000");
            String divider = "******************************************************" +
                                             "***********\n";
            JTextArea textOut = new JTextArea(divider, 10, 30);
            JScrollPane scroller = new JScrollPane(textOut);

            for(int sub = 0; sub < numberOfOrders; sub++)
            {
                textOut.append("Customer Name: " + orders[sub].getLastName() + ", ");
                textOut.append(orders[sub].getFirstName() + "\n");
                textOut.append("Pool Depth:" +
                                            dec3.format(orders[sub].getInsideDepth()) + "\n");
                textOut.append("Pool Diameter: "+
                                            dec3.format(orders[sub].getInsideDiameter()) + "\n");
                textOut.append("Deck Width: " +
                                            dec3.format(orders[sub].getDeckWidth()) + "\n");
                textOut.append("Deck Length: " +
                                                dec3.format(orders[sub].getDeckLength()) + "\n");
                textOut.append("Number of Bollards Ordered: " +
                                                orders[sub].getNumberOfBollards() + "\n");
                textOut.append("Height of Bollards: " +
                                                dec3.format(orders[sub].getBollardHeight()) + "\n");
                textOut.append("Diameter of Bollards: " +
                                            dec3.format(orders[sub].getBollardDiameter()) + "\n");
                textOut.append("Cubic Yards of Concrete Needed: " +
                                            dec3.format(orders[sub].getConcreteVolume()) + "\n");
                textOut.append(divider);
            } // end for loop
            JOptionPane.showMessageDialog(null, scroller, "Orders Placed",
                                                                        JOptionPane.PLAIN_MESSAGE);
        } // end method DisplayOrders*/


}
这是游泳课

public class Pool implements BackYard
{
    // instance variable(s)
    private double insideDiameter; // in feet
    private double insideDepth; // in inches
    private String lastName;
    private String firstName;

    // class variable(s)
    public static int numberOfOrders;

    // Zero argument constructor.  Sets instance variables to default values
    public Pool()   
    {
        setInsideDiameter(DEFAULT_DIAM_DEPTH);
        setInsideDepth(DEFAULT_DIAM_DEPTH);
        setLastName(DEFAULT_NAME);
        setFirstName(DEFAULT_NAME);
    }

    // Two parameter constructor.  
    // Sets names to input values and measurements to standard values
    public Pool(String lastNameIn, String firstNameIn)
    {
        setInsideDiameter(STANDARD_DIAMETER);
        setInsideDepth(STANDARD_DEPTH);
        setLastName(lastNameIn);
        setFirstName(firstNameIn);
        numberOfOrders++;
    }   

    // Three parameter constructor.  
    // Sets names and depth to input values and diameter to standard value
    public Pool(String lastNameIn, String firstNameIn, double depthIn)
    {
        setInsideDiameter(STANDARD_DIAMETER);
        setInsideDepth(depthIn);
        setLastName(lastNameIn);
        setFirstName(firstNameIn);
        numberOfOrders++;
    }   

    // Three parameter constructor.  
    // Sets all instance variables to input values
    public Pool(String lastNameIn, String firstNameIn, double depthIn, 
        double diameterIn)
    {
        setInsideDiameter(diameterIn);
        setInsideDepth(depthIn);
        setLastName(lastNameIn);
        setFirstName(firstNameIn);
        numberOfOrders++;
    }   

    // returns depth
    public double getInsideDepth()
    {
        return insideDepth;
    }

    // validates input and sets depth
    public void setInsideDepth(double inDepth)
    {
        insideDepth =  ((inDepth >= MIN_DEPTH && 
                    inDepth <= MAX_DEPTH) ? inDepth : DEFAULT_DIAM_DEPTH);
    }

    // returns diameter
    public double getInsideDiameter()
    {
        return insideDiameter;
    }

    // validates diameter and sets diameter
    public void setInsideDiameter(double inDiameter)
    {
        insideDiameter = ((inDiameter >= MIN_DIAMETER && 
                    inDiameter <= MAX_DIAMETER) ? inDiameter : DEFAULT_DIAM_DEPTH);
    }

    // validates and sets last name
    public void setLastName(String lastNameIn)
    {
        lastName = ((lastNameIn.length()) > 0 ? lastNameIn : DEFAULT_NAME);
    }

    // returns last name
    public String getLastName()
    {
        return lastName;
    }

    // validates and sets first name
    public void setFirstName(String firstNameIn)
    {
        firstName = ((firstNameIn.length()) > 0 ? firstNameIn : DEFAULT_NAME);
    }

    // returns first name
    public String getFirstName()
    {
        return firstName;
    }

    // calculates total concrete necessary in cubic yards and returns that value
    @Override
    public double getConcreteVolume()
    {
        if(getInsideDiameter() == 0 || getInsideDepth() == 0)
            return 0.000;
        else
            return (getCylinderVolume(getInsideDiameter() * FT_TO_IN + DENSITY + 
                         DENSITY, getInsideDepth() + DENSITY) / CU_IN_TO_CU_YD) -
                       (getCylinderVolume(getInsideDiameter() * FT_TO_IN, 
                         getInsideDepth())) / CU_IN_TO_CU_YD;
    }

    // private utility method used to calculate the volume of a cylinder
    public double getCylinderVolume(double diameter, double height)
    {
        return (Math.PI * Math.pow(diameter / 2.0, 2)) * height;
    }
} //end class Pool
公共类池
{
//实例变量
专用双内窥式流量计;//以英尺为单位
私人双人床内深;//英寸
私有字符串lastName;
私有字符串名;
//类变量
公共静态整数订单;
//零参数构造函数。将实例变量设置为默认值
公共泳池()
{
SetInsidedAmeter(默认直径深度);
设置内部深度(默认直径深度);
setLastName(默认名称);
setFirstName(默认名称);
}
//双参数构造函数。
//将名称设置为输入值,将测量值设置为标准值
公共池(字符串lastNameIn,字符串firstNameIn)
{
设置内径流量计(标准直径);
设置内部深度(标准深度);
setLastName(lastNameIn);
setFirstName(firstNameIn);
numberOfOrders++;
}   
//三参数构造函数。
//将名称和深度设置为输入值,将直径设置为标准值
公共池(字符串lastNameIn、字符串firstNameIn、双depthIn)
{
设置内径流量计(标准直径);
设置内部深度(深度);
setLastName(lastNameIn);
setFirstName(firstNameIn);
numberOfOrders++;
}   
//三参数构造函数。
//将所有实例变量设置为输入值
公共池(字符串lastNameIn、字符串firstNameIn、双depthIn、,
双直径
{
设置内径直径计(直径);
设置内部深度(深度);
setLastName(lastNameIn);
setFirstName(firstNameIn);
numberOfOrders++;
}   
//返回深度
公共双getInsideDepth()
{
返回内部深度;
}
//验证输入并设置深度
公共无效设置内部深度(双重深度)
{
内部深度=((深度>=最小深度&&
深度=最小直径和
inDiameter 0?lastNameIn:默认名称);
}
//返回姓氏
公共字符串getLastName()
{
返回姓氏;
}
//验证并设置名字
public void setFirstName(字符串firstNameIn)
{
firstName=((firstNameIn.length())>0?firstNameIn:默认名称);
}
//返回名字
公共字符串getFirstName()
{
返回名字;
}
//以立方码为单位计算所需的混凝土总量,并返回该值
@凌驾
公共双卷
{
如果(GetInsidedAmeter()==0 | | GetInsidedOpth()==0)
返回0.000;
其他的
返回(getCylinderVolume(GetInsidedAmeter()*FT_到_IN+密度+
密度,getInsideDepth()+密度)/CU_IN_至_CU_YD)-
(getCylinderVolume(GetInsidedAmeter()*英尺到英寸,
getInsidedOpth())/CU_IN_TO_CU_YD;
}
//用于计算圆柱体体积的专用方法
公共双筒容积(双倍直径,双倍高度)
{
返回值(数学PI*数学功率(直径/2.0,2))*高度;
}
}//结束类池

第一个具体类必须实现其超类型中的所有抽象方法。在您的情况下,要么使池抽象,要么实现尚未实现的超类型中的所有抽象方法

换句话说,若您不允许抽象类池具有抽象方法,那个么库的客户端就可以这样做

Pool p = new Pool();
p.getBollardHeight();

这无法工作,因为此方法未实现。另一方面,如果您将池抽象化,则不允许您对其进行实例化,也不会出现上述问题。

您必须在
池中
类中创建您在
后院中看到的所有方法。

您以前是否签署过合同

此代码:

public class Pool implements BackYard
就像一个。就像对后院说:“嘿,后院,我正在签署一份合同,保证我会为你所有的方法创建代码。”

但是Pool违反了合同。 警察(编辑者)发现后说:做吧,伙计,或者让你的孩子做吧。


要么你自己完成契约(即为后院中提到的所有方法创建代码),要么让你的后代完成契约(子类将是添加代码的子类)。你有点“受惩罚”-在完成承诺之前,让您处于抽象状态。

请不要以这种方式删除您的内容。这对那些为您的问题投入时间和精力的人是不公平的。如果您不想让您的导师看到您正在向在线人士寻求帮助,请不要将您的家庭作业问题发布在此处。但是,一旦发布,您就可以不能简单地擦除它,因为您想隐藏它。
public class Pool implements BackYard