java - 不确定我正在使用继承/多态性问题吗?

标签 java

因此,对于这个作业,我必须创建一个汽车类(父类)和一个经过认证的二手车类(子类),并且我需要让父类有一种方法来检查它是否仍在保修期内。 *检查保修状态()。该方法调用 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/

相关文章:

java - JComboBox 和 IDeref 的 Clojure 代理给出了 java.lang.VerifyError

java - 连接到 StompClient 时我可能在哪里出错?

java - 在java中处理套接字

Hashmap 中的 Java 多边形

java - 如何在我的 MainActivity 中获取 EditTextPreference 的引用?

java - Spring - 从 application.properties 动态创建 Bean

Java:如何使我的程序打印时没有两个额外的点?

java - RecyclerView项目的图像错误

java - 为某些记录器设置日志级别,但不为其他记录器设置日志级别

java - 时间条目(hh):mm form