Java 不确定我是否使用了继承/多态性问题?

Java 不确定我是否使用了继承/多态性问题?,java,Java,因此,对于这个任务,我必须创建一个汽车类(父类)和一个certifiedpreowned(子类),我需要让父类有一个方法来检查它是否仍在保修期内*检查保修状态()。该方法调用布尔值isCoveredUnderWarranty()来验证汽车是否仍有保修。我的问题在CertifiedProowned类中,我还必须调用isCoveredUnderWarranty()以查看它是否包含在扩展保修范围内,然后通过car方法中的checkWarrantyStatus()调用它。我希望这是有道理的。因此,总而言

因此,对于这个任务,我必须创建一个汽车类(父类)和一个certifiedpreowned(子类),我需要让父类有一个方法来检查它是否仍在保修期内*检查保修状态()。该方法调用布尔值isCoveredUnderWarranty()来验证汽车是否仍有保修。我的问题在CertifiedProowned类中,我还必须调用isCoveredUnderWarranty()以查看它是否包含在扩展保修范围内,然后通过car方法中的checkWarrantyStatus()调用它。我希望这是有道理的。因此,总而言之,我需要在儿童课程中让它检查isCoveredUnderWarranty和extended warranty信息。然后它必须移动到父类,以便可以通过checkWarrantyStatus调用它。这是我的代码,我有一个错误

    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();





    }           
}
公车{
公共国际年;
公共字符串制作;
公共字符串模型;
公共交通里程;
公共文件;
公众耳朵;
int currentYear=java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
/**使用特定参数构造car对象*/
公共汽车(整数y、字符串m、字符串mod、整数mi){
今年=y;
this.make=m;
this.model=mod;
这个.currentMiles=mi;
}       
public-int-get保修文件(){
退货保证文件;
}
公共无效设置担保文件(int担保文件){
this.warrantyMiles=warrantyMiles;
}
公共int GetGuardyYears(){
退货保证书;
}
公共无效设置保修期(int保修期){
this.warrantyYears=warrantyYears;
}
公共布尔值isCoveredUnderWarranty(){
如果(当前英里数<保修英里数){
如果(当前年度<(年度+保修期))
返回true;
}
返回false;
}
公共无效检查担保状态(){
如果(isCoveredUnderWarranty()){
System.out.println(“您的车”+年份+“”+品牌+“”+车型+”和“+
currentMiles+“仍在保修范围内”);
}
其他的
System.out.println(“您的车”+年份+“”+品牌+“”+车型+”和“+
currentMiles+“超出保修范围”);
}
}
公共等级认证的私家车扩展私家车{
公共认证车辆(整数y、字符串m、字符串mod、整数mi){
超级(mi、m、mod、y);
}
公共int延长保修期;
公共int扩展保修文件;
public int getExtendedAuthorityEars(){
返回延长保修期;
}
公共无效设置ExtendedAuthoryYears(int ExtendedAuthoryYears){
this.extendedGuaryYears=extendedGuaryYears;
}
public int getExtendedAuthorityFiles(){
返回扩展的保修文件;
}
public void setExtendedGuaryMiles(int-ExtendedGuaryMiles){
this.extendedGuaryMiles=extendedGuaryMiles;
}
公共布尔值isCoveredUnderWarranty(){
if(当前英里数<扩展保修英里数){
如果(当前年度<(年度+延长保修期))
返回true;
}
返回false;
}
}
公共级试验车{
公共静态void main(字符串[]args){
Car car1=新车(2014年,“本田”,“思域”,255);
car1.设置保修文件(60000);
car1.耳座(5);
car1.检查保修状态();
Car car2=新车(2000年,“法拉利”、“F355”和8500);
car2.设置保修文件(20000);
car2.耳(7);
car2.检查保修状态();
CertifiedPreOwnCar car3=新的CertifiedPreOwnCar(2000,“本田”,“雅阁”,65000);
car3.耳(3);
car3.设置保修文件(30000);
car3.设置扩展保修文件(100000);
car3.设置延长保修期(7);
car3.检查保修状态();
}           
}

在基类车中,您将数据成员设置为“private”。子类无法访问其超级类的私有成员。考虑为数据成员使用“受保护”或“public”,或者为Car类中的值提供GETTER(也受保护或公共)方法。

考虑以下示例:

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);
}
这是使用当前变量名时容易犯的错误。虽然选择短变量名很有诱惑力,但它可能会引入简单的错误,并使代码更难调试(特别是对于没有编写它的人)


考虑使用更具表现力的名称,例如“年”、“制造”、“型号”和“英里”

在基类汽车中,您可以将数据成员设置为“专用”。子类无法访问其超级类的私有成员。考虑为数据成员使用“受保护”或“public”,或者为Car类中的值提供GETTER(也受保护或公共)方法。

考虑以下示例:

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);
}
这是使用当前变量名时容易犯的错误。虽然选择短变量名很有诱惑力,但它可能会引入简单的错误,并使代码更难调试(特别是对于没有编写它的人)


考虑使用更具表现力的名称,例如“年”、“制造”、“型号”和“英里”

在基类汽车中,您可以将数据成员设置为“专用”。子类无法访问其超级类的私有成员。考虑为数据成员使用“受保护”或“public”,或者为Car类中的值提供GETTER(也受保护或公共)方法。

考虑以下示例:

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);
}
这是使用当前变量名时容易犯的错误。虽然选择短变量名很有诱惑力,但它可以引入