Java抽象类与继承
有人可以看看我的代码,并建议我在哪里偏离了工作代码的路径 作业内容如下: 编写一个名为UseLoan的应用程序,它使用一个名为PersonalLoan的抽象类和子类来显示两种不同类型的贷款——房屋贷款和汽车贷款——以及每种贷款的每月成本。每个子类都包含一个构造函数,该构造函数在提示用户输入至少一个用于成本确定决策的数据条目后,根据贷款类型设置每月成本。(例如,对于汽车贷款,您可能会询问汽车的年龄,或者它是否是跑车。)在PersonalLoan类中包含一个抽象的toString()方法,该方法构造一个包含所有相关数据的字符串。提示用户输入保险类型,然后创建并显示相应的对象。将文件另存为PersonalLoan.java、CarLoan.java、homeLoan.java和UseLoan.java 当我编译代码时,我得到以下错误 线程“main”java.lang中出现异常。错误:未解决的编译问题: 无法实例化CarLoan类型 无法实例化CarLoan类型 无法实例化CarLoan类型 无法实例化CarLoan类型 无法实例化HomeLoan类型Java抽象类与继承,java,inheritance,Java,Inheritance,有人可以看看我的代码,并建议我在哪里偏离了工作代码的路径 作业内容如下: 编写一个名为UseLoan的应用程序,它使用一个名为PersonalLoan的抽象类和子类来显示两种不同类型的贷款——房屋贷款和汽车贷款——以及每种贷款的每月成本。每个子类都包含一个构造函数,该构造函数在提示用户输入至少一个用于成本确定决策的数据条目后,根据贷款类型设置每月成本。(例如,对于汽车贷款,您可能会询问汽车的年龄,或者它是否是跑车。)在PersonalLoan类中包含一个抽象的toString()方法,该方法构造
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());
}
}
}
公共类贷款{
公共静态void main(字符串[]args){
个人贷款个人贷款[]=新的个人贷款[5];
int x;
aPersonalLoan[0]=新的CarLoan(“跑车”);
aPersonalLoan[1]=新的CarLoan(“SUV”);
aPersonalLoan[2]=新的CarLoan(“混合型”);
aPersonalLoan[3]=新的CarLoan(“皮卡”);
个人贷款[5]=新住房贷款(“30年按揭”);
对于(x=0;x
编译器错误消息已清除。您尚未在PersonalLoan
类中提供setPrice5()
的实现
与
HomeLoan
类中的setPrice5()
方法类似,您还需要将setPrice5()方法添加到PersonalLoan
类中。堆栈跟踪中的基本问题是,CarLoan在PersonalLoan
类中没有实现setPrice5()
但是通过设计,你的类是不对的
PersonalLoan是独立于贷款类型的,因此不应具有贷款特定信息,如SetPortSprice等
PersonalLoan
应该有如下方法
1) setLoanAmount()
-abstract,
2) setLoanAmount()
3) setEMI()
-摘要
4) getEMI()
根据赋值语句中提到的输入参数在子类的构造函数中设置
public HomeLoan(double loanAmount, int loanTenure) {
super(title);
setLoanAmount(loanAmount)
int homeLoanRate = 10;
double emi = (loanAmount*loanTenure*homeLoanRate)/100; // pls change formula. This is a just a guideline
setEMI(emi);
}
类似地,CarLoan
应采用当前车主的购买成本、车龄、使用年限等参数,并根据折旧计算当前价格,从而计算emi
希望这有帮助@JamesBlent呃,你尝试过实现抽象方法setPrice5吗?carLoan是抽象的…你可以查看公共抽象CarLoan@Keyser在aPersonalLoan[0]=新款CarLoan(“跑车”)下出现红线;aPersonalLoan[1]=新的CarLoan(“SUV”);aPersonalLoan[2]=新的CarLoan(“混合型”);aPersonalLoan[3]=新的CarLoan(“皮卡”);个人贷款[5]=新住房贷款(“30年按揭”)@JamesBlent:编译器错误与运行时异常不同。如果您的代码违反java语言规范,则会发生编译器错误(您看到的红色标记)。@JamesBlent您不应该用新的错误更新您的问题。而且,当您的代码没有编译时,您不应该发送垃圾邮件Stackoverflow:p。并发布完整的堆栈跟踪。为什么要使用所有的
setPriceX()
方法,而不仅仅是setPrice(int-price)
?()
public HomeLoan(double loanAmount, int loanTenure) {
super(title);
setLoanAmount(loanAmount)
int homeLoanRate = 10;
double emi = (loanAmount*loanTenure*homeLoanRate)/100; // pls change formula. This is a just a guideline
setEMI(emi);
}