Ho bisogno di produrre un progetto con le caratteristiche elencate della programmazione orientata agli oggetti usando Java.Esempio Java con incapsulamento, polimorfismo ed ereditarietà?
Qualcuno potrebbe consultare il mio rapido programma di esempio per confermare che capisco come queste caratteristiche siano implementate e che siano tutte presenti e fatte correttamente?
package Example;
public class Parent {
private int a;
public void setVal(int x){
a = x;
}
public void getVal(){
System.out.println("value is "+a);
}
}
public class Child extends Parent{
//private fields indicate encapsulation
private int b;
//Child inherits int a and getVal/setVal methods from Parent
public void setVal2(int y){
b = y;
}
public void getVal2(){
System.out.println("value 2 is "+b);
}
//having a method with the same name doing different things
//for different parameter types indicates overloading,
//which is an example of polymorphism
public void setVal2(String s){
System.out.println("setVal should take an integer.");
}
}
Hai ereditarietà e incapsulamento, ma non hai alcun polimorfismo. Il tuo commento sul codice spiega perché: il metodo dovrebbe avere lo stesso nome. Non è così. Utilizzare sempre l'annotazione @ Override quando si intende sovrascrivere un metodo. –
Non so se il sovraccarico è un modo per presentare il polimorfismo ([probabilmente non] (http://stackoverflow.com/questions/824763/is-polymorphism-another-term-for-overloading)). Se ti aggiorno proverei a presentarlo con override come in [questo esempio] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading). – Pshemo
Inoltre, non chiamare 'getVal()' un metodo che non ottiene nulla, ma lo stampa invece. getter e setter sono una convenzione ben stabilita in Java e il metodo getVal() è denominato come getter, ma non è uno. Se fosse un getter, restituirebbe quello che è stato impostato dal metodo setter corrispondente ('setVal()'). –