java多态问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 02:50:11
代码如下:
class A0{
int i,j;
A0(int i,int j){
this.i=i;
this.j=j;
}
int add(){
return i+j;
}
}

class A extends A0{
int i,j;
A(int i,int j){
super(i,j);
}
int multiply(){
return 0;
}
}

class B extends A{
int i,j;
B(int i,int j){
super(i,j);
}
int multiply(){
return i*j;
}
}
public class ClassExtendsPolymorphism {

public static void main(String[] args) {
A a=new B(6,5);
System.out.println("i*j =:"+a.multiply());
System.out.println("i+j =:"+a.add());
}
}
执行结果如下
i*j =:0
i+j =:11
问:为什么a.multiply()没有执行B类中的multiply?

肯定执行了,你可以在b的multiply中打印一下看看

为什么你的是0?因为你在B中又定义了i和j,你却在构造方法中调用super赋值给父类的i和j,B中的i和j都是0,相乘不是0才怪

你把A和B中定义ij的地方注释掉

a.multiply()是执行了的,只是B中的成员变量没有赋值而已。