读书人

关于多态的有关问题

发布时间: 2012-02-01 16:58:19 作者: rapoo

关于多态的问题
现有如下代码:
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();这句发生异常。


请问是不是元素是对象的数组变量没有多态性?



[解决办法]
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(); //该行语句发生异常
}
}

读书人网 >J2SE开发

热点推荐