因此,对于这个作业,我必须创建一个汽车类(父类)和一个经过认证的二手车类(子类),并且我需要让父类有一种方法来检查它是否仍在保修期内。 *检查保修状态()。该方法调用 boolean 值 isCoveredUnderWarranty() 来验证汽车是否仍有保修。我的问题是在 Certifiedpreowned 类中,我还必须调用 isCoveredUnderWarranty() 来查看它是否包含在延长保修期内,然后通过 car 方法中的 checkWarrantyStatus() 调用它。我希望这是有道理的。总而言之,我需要在子类中让它检查 isCoveredUnderWarranty 以及延长保修信息。然后它必须移动到父类,以便可以通过 checkWarrantyStatus 调用它。这是我的代码,有 1 个错误。
public class Car {
public int year;
public String make;
public String model;
public int currentMiles;
public int warrantyMiles;
public int warrantyYears;
int currentYear =java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
/** construct car object with specific parameters*/
public Car (int y, String m, String mod, int mi){
this.year = y;
this.make = m;
this.model = mod;
this.currentMiles = mi;
}
public int getWarrantyMiles() {
return warrantyMiles;
}
public void setWarrantyMiles(int warrantyMiles) {
this.warrantyMiles = warrantyMiles;
}
public int getWarrantyYears() {
return warrantyYears;
}
public void setWarrantyYears(int warrantyYears) {
this.warrantyYears = warrantyYears;
}
public boolean isCoveredUnderWarranty(){
if (currentMiles < warrantyMiles){
if (currentYear < (year+ warrantyYears))
return true;
}
return false;
}
public void checkWarrantyStatus(){
if (isCoveredUnderWarranty()){
System.out.println("Your car " + year+ " " + make+ " "+ model+ " With "+
currentMiles +" is still covered under warranty");
}
else
System.out.println("Your car " + year+ " " + make+ " "+ model+ " With "+
currentMiles +" is out of warranty");
}
}
public class CertifiedPreOwnCar extends Car{
public CertifiedPreOwnCar(int y, String m, String mod, int mi) {
super(mi, m, mod, y);
}
public int extendedWarrantyYears;
public int extendedWarrantyMiles;
public int getExtendedWarrantyYears() {
return extendedWarrantyYears;
}
public void setExtendedWarrantyYears(int extendedWarrantyYears) {
this.extendedWarrantyYears = extendedWarrantyYears;
}
public int getExtendedWarrantyMiles() {
return extendedWarrantyMiles;
}
public void setExtendedWarrantyMiles(int extendedWarrantyMiles) {
this.extendedWarrantyMiles = extendedWarrantyMiles;
}
public boolean isCoveredUnderWarranty() {
if (currentMiles < extendedWarrantyMiles){
if (currentYear < (year+ extendedWarrantyYears))
return true;
}
return false;
}
}
public class TestCar {
public static void main(String[] args) {
Car car1 = new Car(2014, "Honda", "Civic", 255);
car1.setWarrantyMiles(60000);
car1.setWarrantyYears(5);
car1.checkWarrantyStatus();
Car car2 = new Car(2000, "Ferrari", "F355", 8500);
car2.setWarrantyMiles(20000);
car2.setWarrantyYears(7);
car2.checkWarrantyStatus();
CertifiedPreOwnCar car3 = new CertifiedPreOwnCar(2000, "Honda", "Accord", 65000);
car3.setWarrantyYears(3);
car3.setWarrantyMiles(30000);
car3.setExtendedWarrantyMiles(100000);
car3.setExtendedWarrantyYears(7);
car3.checkWarrantyStatus();
}
}
最佳答案
在基类 Car 中,将数据成员设置为“私有(private)”。子级不能访问其父类(super class)的私有(private)成员。考虑对数据成员使用“ protected ”或“公共(public)”,或者为 Car 类中的这些值提供 getter(也是 protected 或公共(public))方法。
考虑以下示例:
class Parent {
private int x;
protected int y;
public int z;
}
class Child extends Parent {
public void doit(){ System.out.println(x); //compiler error }
public void doit2(){ System.out.println(y); //allowed }
public void doit3(){ System.out.println(z); //allowed }
}
编辑:
对于本文评论中所述的其他问题,CertifiedPreownCar 的构造函数当前为
public CertifiedPreOwnCar(int y, String m, String mod, int mi) {
super(mi, m, mod, y);
}
我相信应该是
public CertifiedPreOwnCar(int y, String m, String mod, int mi) {
super(y, m, mod, mi);
}
这是一个使用当前变量名称很容易犯的错误。虽然选择短变量名很诱人,但它可能会引入简单的错误,并使代码更难调试(尤其是对于没有编写代码的人)。
考虑使用更具表现力的名称,例如“年份”、“品牌”、“型号”和“英里”
关于java - 不确定我正在使用继承/多态性问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23946407/