现有如下代码:
public class A {
private int x,y;
private int a,b;

public A(){
System.out.println("A Constructor1");
}

public A(int x,int y){
System.out.println("A Constructor2");
this.x=x;
this.y=y;
}

public void returnType(){
System.out.println("This is A");
}

public void setValue(int a,int b){
this.a=a;
this.b=b;
}

public void display(){
System.out.print("A display:");
System.out.println("x="+x+" "+"y="+y);
System.out.println("a="+a+" "+"b="+b);
}
}public class B extends A {
private int x,y;
private int c,d;

public B(){
System.out.println("B Constructor1");
}

//显示B中(包括从A中继承的)所有的域
public B(int x,int y){
super(x,y);//调用A的构造器
System.out.println("B Constructor2");
this.x=x;
this.y=y;
}

public void setValue(int c,int d){
this.c=c;
this.d=d;
}

public void display(){  
super.display();
System.out.print("B display:");
System.out.println("x="+x+" "+"y="+y);
System.out.println("c="+c+" "+"d="+d);
}
}public class Test { /**
 * @param args
 */
public static void main(String[] args) {
B []b=new B[10];
A []a=b;
a[0].display();  //该行语句发生异常
}
}运行后,为什么会产生如下的异常:
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:29)
注:也就是a[0].display();这句发生异常。
请问是不是元素是对象的数组变量没有多态性?

解决方案 »

  1.   

    class A {  //首先你的问题在这里,一个文件里面只能有一个类是public的(当然内部类可以        是),下面的B类也是一样的问题
    private int x,y;
    private int a,b;public A(){
    System.out.println("A Constructor1");
    }public A(int x,int y){
    System.out.println("A Constructor2");
    this.x=x;
    this.y=y;
    }public void returnType(){
    System.out.println("This is A");
    }public void setValue(int a,int b){
    this.a=a;
    this.b=b;
    }public void display(){
    System.out.print("A display:");
    System.out.println("x="+x+" "+"y="+y);
    System.out.println("a="+a+" "+"b="+b);
    }
    }class B extends A {
    private int x,y;
    private int c,d;public B(){
    System.out.println("B Constructor1");
    }//显示B中(包括从A中继承的)所有的域
    public B(int x,int y){
    super(x,y);//调用A的构造器
    System.out.println("B Constructor2");
    this.x=x;
    this.y=y;
    }public void setValue(int c,int d){
    this.c=c;
    this.d=d;
    }public void display(){
    super.display();
    System.out.print("B display:");
    System.out.println("x="+x+" "+"y="+y);
    System.out.println("c="+c+" "+"d="+d);
    }
    }public class TheAnswer {public static void main(String[] args) {
    B []b=new B[10];     //这是我的修改,数组也可以用多态,但是你这里只是创建了一个
    for(int i=0;i<10;i++)//B类型的数组,而里面没有任何东西,你得先将B的对象装进去,
      b[i]=new B();      //然后才能引用其方法,否则就会抛出java.lang.NullPointerException
    A []a=b;             //你可以在API文档里面查java.lang.NullPointerException的具体介绍
                        
    a[0].display(); //该行语句发生异常
    }
    }