java - Not sure I am using inheritance/polymorphism issue? -


so assignment have create car class(parent) , certifiedpreowned (child) , need have parent class have method check if still under warranty. *checkwarrantystatus(). method calls boolean iscoveredunderwarranty() veryify if car still has warranty. issue in certifiedpreowned class have call iscoveredunderwarranty() see if covered under extended warranty , have called via checkwarrantystatus() in car method. hope makes sense. sum need in child class have check iscoveredunderwarranty extended warranty info. has move parent class can called via checkwarrantystatus. here code, have 1 error.

    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 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+ " "+              currentmiles +" still covered under warranty");     }     else     system.out.println("your car " + year+ " " + make+ " "+ model+ " "+       currentmiles +" 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();          }            } 

in base class car, set data members 'private'. children cannot access private members of super class. consider using 'protected' or 'public' data members or provide getter (also protected or public) methods values in car class.

consider following example:

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 } } 

edit:

for other problem stated in comments on post, constructor of certifiedpreowncar currently

public certifiedpreowncar(int y, string m, string mod, int mi) {   super(mi, m, mod, y); } 

and believe should be

public certifiedpreowncar(int y, string m, string mod, int mi) {   super(y, m, mod, mi); } 

this easy mistake make current variable names. while tempting choose short variable names, can introduce simple mistakes , can make code harder debug (especially didn't write it).

consider using more expressive names such 'year', 'make', 'model', , 'miles'


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -