Java抽象类与继承
有人可以看看我的代码,并建议我在哪里偏离了工作代码的路径
作业内容如下: 编写一个名为UseLoan的应用程序,它使用一个名为PersonalLoan的抽象类和子类来显示两种不同类型的贷款——房屋贷款和汽车贷款——以及每种贷款的每月成本。每个子类都包含一个构造函数,该构造函数在提示用户输入至少一个用于成本确定决策的数据条目后,根据贷款类型设置每月成本。(例如,对于汽车贷款,您可能会询问汽车的年龄,或者它是否为跑车。)在PersonalLoan类中包含一个抽象toString()方法,该方法构造一个包含所有相关数据的字符串。提示用户输入保险类型,然后创建并显示相应的对象。将文件另存为PersonalLoan。爪哇,卡洛安。爪哇,家庭贷款。java和UseLoan。爪哇
当我编译代码时,我得到以下错误
线程“main”java中出现异常。lang.错误:未解决的编译问题: 无法实例化CarLoan类型 无法实例化CarLoan类型 无法实例化CarLoan类型 无法实例化CarLoan类型 无法实例化HomeLoan类型
at UseLoan.main(UseLoan.java:7)
我的代码如下:
public abstract class PersonalLoan {
String title = new String();
double sportsPrice, suvPrice, hybridPrice, pickupPrice, price30, price15, price5;
public PersonalLoan(String t) {
title = t;
}
public String getTitle() {
return title;
}
public double getSportsPrice() {
return sportsPrice;
}
public abstract void setSportsPrice();
public double getSUVPrice() {
return suvPrice;
}
public abstract void setSUVPrice();
public double getHybridPrice() {
return hybridPrice;
}
public abstract void setHybridPrice();
public double getPickupPrice() {
return pickupPrice;
}
public abstract void setPickupPrice();
public double getPrice30() {
return price30;
}
public abstract void setPrice30();
public double getPrice15() {
return price15;
}
public abstract void setPrice15();
public double getPrice5() {
return price5;
}
public abstract void setPrice5();
}
下面是第二个子类PersonalLoan:
public class CarLoan extends PersonalLoan {
public CarLoan(String title) {
super(title);
setSportsPrice();
setSUVPrice();
setHybridPrice();
setPickupPrice();
}
public void setSportsPrice() {
super.sportsPrice = 1.99;
}
public void setSUVPrice() {
super.suvPrice = 2.99;
}
public void setHybridPrice() {
super.hybridPrice = 3.99;
}
public void setPickupPrice() {
super.pickupPrice = 4.99;
}
}
这是家庭贷款:
public class HomeLoan extends PersonalLoan {
public HomeLoan(String title) {
super(title);
setPrice30();
setPrice15();
setPrice5();
}
public void setPrice30() {
super.price30 = 1.99;
}
public void setPrice15() {
super.price15 = 2.99;
}
public void setPrice5() {
super.price5 = 3.99;
}
}
以下是主要类别:
public class UseLoan {
public static void main(String[] args) {
PersonalLoan aPersonalLoan[] = new PersonalLoan[5];
int x;
aPersonalLoan[0] = new CarLoan("Sports Car");
aPersonalLoan[1] = new CarLoan("SUV");
aPersonalLoan[2] = new CarLoan("Hybrid");
aPersonalLoan[3] = new CarLoan("Pickup Truck");
aPersonalLoan[5] = new HomeLoan("30 Year Mortgage");
for (x = 0; x < aPersonalLoan.length; ++x) {
System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[x].getSportsPrice());
//System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[x].getSUVPrice());
//System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[x].getHybridPrice());
//System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[x].getPickupPrice());
//System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[X].getPrice30());
//System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[X].getPrice15());
//System.out.println("Book #" + (x + 1) + ": " + aPersonalLoan[x].getTitle() + " costs $" + aPersonalLoan[X].getPrice5());
}
}
}
# 1 楼答案
堆栈跟踪的基本问题是CarLoan没有在
PersonalLoan
类中实现setPrice5()
但是通过设计,你的类是不对的
PersonalLoan是独立于贷款类型的,因此不应具有贷款特定信息,如SetPortSprice等
PersonalLoan
应该有如下方法 1)setLoanAmount()
-摘要, 2)setLoanAmount()
3)setEMI()
-摘要 4)getEMI()
根据赋值语句中提到的输入参数,在子类的构造函数中设置同样
CarLoan
应采用当前车主的购买成本、车龄、使用年限等参数,并根据折旧计算当前价格,从而计算emi希望这有帮助
# 2 楼答案
编译器错误消息很清楚。您尚未在
PersonalLoan
类中提供setPrice5()
的实现与
HomeLoan
类中的setPrice5()
方法类似,您还需要将setPrice5()方法添加到PersonalLoan
类中