2016-08-02 6 views
0

У меня есть, например, такие классы:Java: использовать методы получения и установки с полиморфизмом

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

И в моем главном классе я хотел бы использовать полиморфизм: Parent p = new Child();. Мне нужно использовать функции setA и setB как на этом p-элементе. Каков наилучший способ сделать это? Я вижу прямо сейчас функцию setA из-за полиморфизма - поэтому мне нужно переопределить сеттеры и геттеры в дочернем классе? Рекомендуется ли это?

+3

Этот вопрос будет быть закрытым, поскольку он стоит на CR, потому что это код заглушки. пожалуйста, не мигрируйте. –

ответ

0

Java использует динамическое связывание, чтобы определить, какие методы будут доступны, поэтому, когда вы хотите получить доступ к методам другого класса, вам необходимо передать его этому классу. В вашем случае, когда вы хотите получить доступ к методам класса ребенка, вы можете явно привести ваш OBJ к ребенку, а затем вызвать ваши методы:

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

Да, я знаю это решение, но я не предпочитаю его, и, когда я читал об этой теме, до этого также не рекомендуется: 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

Добро пожаловать в SO. Пожалуйста, правильно отформатируйте свой код и оставьте только ответы на код. См. Http://stackoverflow.com/help/how-to-answer –

0

полиморфизм означает одно имя метода, но различные виды использование для достижения полиморфизма в этом 2 классов, которые необходимо переопределить Parent класс setA() метод, чтобы сделать это, вы должны вызвать супер ключевое слово в классе ребенка, как этот

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

} 

отмечают, что супер лишь модели шириной в не статический метод класса Child

, если вы хотите установить б в методе setA() вы можете просто создать перегруженный метод означает то же имя, но другой список параметров, это также полиморфный характер

 Смежные вопросы

  • Нет связанных вопросов^_^