Java:使用具有多态性的getter和setter

时间:2016-08-02 17:54:06

标签: java inheritance polymorphism override setter

我有这些类:

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

在我的Main课程中,我想使用多态:Parent p = new Child();。 我需要在这个p元素上使用setA和setB函数。做这个的最好方式是什么?由于多态性,我现在只看到setA函数 - 所以我必须覆盖子类中的setter和getter吗?推荐吗?

3 个答案:

答案 0 :(得分:0)

Java使用动态绑定来按顺序决定哪些方法可以访问,因此当您想要访问另一个类的方法时,必须将其强制转换为该类。在您想要访问类Child的方法的情况下,您可以显式地将obj转换为Child,然后调用您的方法:

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

答案 1 :(得分: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;


            }
        }
    }
}

答案 2 :(得分:0)

多态性意味着一个方法名称,但在这2个类中实现多态的不同用途,您需要覆盖ParentsetA()方法来执行此操作,您必须调用超级您的Child类中的关键字就像这样

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

}

请注意,super仅适用于Child类的非静态方法

如果你想在你的setA()方法中设置b,你可以创建一个重载方法,意思是同名,但参数列表不同,这本质上也是多态的