我有这些类:
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吗?推荐吗?
答案 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个类中实现多态的不同用途,您需要覆盖Parent
类setA()
方法来执行此操作,您必须调用超级您的Child类中的关键字就像这样
public void setA(A a)
{
super.setA(A a);
}
请注意,super仅适用于Child类的非静态方法
如果你想在你的setA()
方法中设置b,你可以创建一个重载方法,意思是同名,但参数列表不同,这本质上也是多态的