2016-08-02 18 views
0

ich zum Beispiel haben diese Klassen:Java: Verwendung Getter und Setter mit Polymorphismus

public class A { 
} 

public class B { 
} 

public class Parent { 
    private A a; 
    public A getA() { 
     return a; 
    } 
    public void setA(A a) { 
     this.a = a; 
    } 
} 

public class Child extends Parent { 
    private B b; 
    public B getB() { 
     return b; 
    } 
    public void setB(B b) { 
     this.b = b; 
    } 
} 

Und in meiner Hauptklasse würde Ich mag Polymorphismus verwenden: Parent p = new Child();. Ich muss setA und setB Funktionen für dieses p-Element verwenden. Was ist der beste Weg, dies zu tun? Ich sehe im Moment nur die setA-Funktion wegen der Polymorphie - also muss ich die Setter und Getter in der Child-Klasse überschreiben? Ist es empfehlenswert?

+3

Diese Frage würde geschlossen sein, wie es auf CR steht, weil es Stub-Code ist. Bitte migrieren Sie es nicht. –

Antwort

0

Java verwendet die dynamische Bindung, um zu entscheiden, welche Methoden zugänglich sind. Wenn Sie also auf Methoden einer anderen Klasse zugreifen möchten, müssen Sie sie in diese Klasse umwandeln. In Ihrem Fall, wenn Sie Methoden der Klasse Child zuzugreifen, können Sie explizit Ihre obj Child gegossen und dann Methoden aufrufen:

 Parent p = new Child(); 
    ((Child) p).getB(); 
+0

Ja, ich kenne diese Lösung, aber ich bevorzuge es nicht und wie ich zu diesem Thema gelesen habe, bevor dies auch nicht empfohlen wird: http://stackoverflow.com/questions/11466441/call-a-child-class-method- from-a-parent-class-object –

0
import java.util.Scanner; 

public class Calculator { 
public static void main(String []args){ 

for(int count=1;count<=200;count++){ 
    Scanner x=new Scanner(System.in); 

    System.out.println("1 for sum\n2 for sub\n3 for div\n4 for multi"); 
    int a=x.nextInt(); 

    double fnum; 
    double snum; 
    switch(a){ 

    case 1: 
      System.out.println("enter first number"); 
      fnum=x.nextDouble(); 
      System.out.println("enter second number"); 
      snum=x.nextDouble(); 
      Sum s=new Sum(fnum,snum); 
      System.out.println("your Sum is "+s.add(fnum, snum)); 
      break; 

    case 2: 
      System.out.println("enter first number"); 
      fnum=x.nextDouble(); 
      System.out.println("enter second number"); 
      snum=x.nextDouble(); 
      Sub d=new Sub(fnum,snum); 
      System.out.println("the difference is "+d.min(fnum, snum)); 
      break; 

    case 3: 
      System.out.println("enter first number"); 
      fnum=x.nextDouble(); 
      System.out.println("enter second number"); 
      snum=x.nextDouble(); 
      Div c=new Div(fnum,snum); 
      System.out.println("the qoutient is "+c.div(fnum, snum)); 
      break; 
    case 4: 
      System.out.println("enter first number"); 
      fnum=x.nextDouble(); 
      System.out.println("enter second number"); 
      snum=x.nextDouble(); 
      Mult m=new Mult(fnum,snum); 
      System.out.println("the product is "+m.tim(fnum, snum)); 
      break; 
    default: 
      System.out.println("invalid input"); 
      x.next(); 
      break; 


      } 
     } 
    } 
} 
+0

Willkommen bei SO. Bitte formatieren Sie Ihren Code korrekt und lassen Sie nur Code-Antworten weg. Siehe http://stackoverflow.com/help/how-to-answer –

0

Polymorphismus bedeutet eine Methode Namen, aber unterschiedlichen Verwendungen Polymorphismus zu erreichen in diesen 2-Klassen müssen Sie Ihre Parent Klasse setA() Methode überschreiben, dies zu tun, müssen Sie das Schlüsselwort super in Ihrem Kind Klasse nennen wie diese

public void setA(A a) 
{ 
    super.setA(A a); 

} 

beachten Sie, dass Super ist nur ein vailable in nicht statische Methode der Kinderklasse

, wenn Sie Ihre b in Ihrem setA() Verfahren einstellen möchten, können Sie eine überladene Methode Sinn gleichen Namen nur erstellen, aber verschiedene Parameterliste, ist dies auch polymorphe in der Natur