Potrzebuję wykonać projekt z wymienionymi cechami programowania obiektowego za pomocą Java.Przykład Java z enkapsulacją, polimorfizmem i dziedziczeniem?
Czy ktoś mógłby przejrzeć mój krótki przykładowy program, aby potwierdzić, że rozumiem, w jaki sposób te cechy są wdrożone i czy wszystkie one są obecne i wykonane prawidłowo?
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.");
}
}
Posiadacie dziedziczenie i hermetyzację, ale nie macie żadnego polimorfizmu. Twój własny komentarz dotyczący kodu wyjaśnia, dlaczego: metoda powinna mieć tę samą nazwę. Tak nie jest. Zawsze używaj adnotacji @Override, gdy masz zamiar zastąpić metodę. –
Nie wiem, czy przeciążenie jest sposobem prezentacji polimorfizmu ([prawdopodobnie nie] (http://stackoverflow.com/questions/824763/is-polymorphism-another-term- for-overloading)). Jeśli spiszę to, spróbuję przedstawić go z nadrzędnym, jak w [tym przykładzie] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading). – Pshemo
Nie wywołuj też metody 'getVal()', która niczego nie pobiera, ale drukuje ją zamiast niej. gettery i setery są dobrze znaną konwencją w Javie, a twoja metoda getVal() ma nazwę getter, ale nie jest. Jeśli był to getter, zwróciłby to, co zostało ustawione przez odpowiednią metodę ustawiającą ('setVal()'). –