现有如下代码:
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();这句发生异常。
请问是不是元素是对象的数组变量没有多态性?
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();这句发生异常。
请问是不是元素是对象的数组变量没有多态性?
解决方案 »
- 聊天程序 求大神 急急急!!!
- 如何判断一个 GIF 文件是否为动画
- private static final long serialVersionUID = 1L; 这个!L是随便写写的吧?我们也可以随意给它一个值吧。?
- jbuilderX中发现一个Bug,大家看看怎样解决!
- 如何使用Java Excel API
- 如何对字符串进行扫描,然后提取相关信息!
- 这个问题出在哪啊?求各位高手帮忙分析分析
- JBuilder 初级问题
- 序列化(serialization)时出错!!!!
- vj++6编译的程序能在unix上用吗?能比较一下jbuilder,vj,jdk或其他编译工具的区别吗?谢谢!
- 怎样写一个类描述学生,并将几个学生的信息能序列化到文件中保存,并能再次读出来?
- java环境变量的配置
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(); //该行语句发生异常
}
}