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