为了账号安全,请及时绑定邮箱和手机立即绑定

子类和父类有相同属性,父类的引用指向子类对象,报空指针异常是什么原因?

子类和父类有相同属性,父类的引用指向子类对象,报空指针异常是什么原因?

shenzhi 2017-03-01 09:46:03
public class Tetromino { Cell[] cells; public Tetromino(){ cells = new Cell[4]; } } public class T extends Tetromino{         Cell[] cells;//如果在这里写了这一句代码,就会报NullPointerException public T(){ this(0,0); } public T(int a,int b){ this.cells=new Cell[]{new Cell(a,b),new Cell(a,b+1),new Cell(a-1,b+1),new Cell(a,b+2)}; } } public class Test { public static void print(Tetromino te){ Cell[] cells=te.cells; boolean mark=false; for(int i=0;i<=19;i++){ for(int j=0;j<=9;j++){ for(int k=0;k<4;k++){ if((i==cells[k].row)&(j==cells[k].col)){ System.out.print("*"); mark =true; break; } else{ mark =false; } } if(mark==false){ System.out.print("-"); } } System.out.println(); } } public static void main(String[] args) { // TODO Auto-generated method stub Tetromino t = new T(1,1); print(t); } }上面这段代码,如果T类中不写Cell[] cells;就不会报错,但是写了之后,在26行如下代码行就会提示异常,请问是什么原因呢??在线等,谢谢。if((i==cells[k].row)&(j==cells[k].col)){
查看完整描述

3 回答

?
慕侠7578997

TA贡献5条经验 获得超1个赞

你子类重写了父类的cells属性 所以你这个构造函数不会修改父类的cells属性 等你print类中读取的时候cells的初始值就是读的父类的cells属性,所以值是null,==的时候就会空指针异常

查看完整回答
1 反对 回复 2017-03-01
  • 3 回答
  • 0 关注
  • 1880 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信