首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于多态的有关问题

2012-02-01 
关于多态的问题现有如下代码:publicclassA{privateintx,yprivateinta,bpublicA(){System.out.println(

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

热点排行