Java调用继承方法总是返回null



我有一个类叫做WallTile

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class WallTile extends Tile
{
private int x;
private int y;
private int id=1;
private ImageIcon image;
private String[] flags=new String[]{"[IMPASSABLE]", "[SIGHT_BLOCKER]"};
public WallTile(int x, int y)
{
this.x=x;
this.y=y;
if((int)(Math.random()*2)==0){
this.image=Sprites.WALLTILE1_SP;
}
else{
this.image=Sprites.WALLTILE2_SP;
}
}
}

继承自Tile

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class Tile
{
private int x;
private int y;
private int id;
private ImageIcon image;
private String[] flags;
public int getX(){
return(this.x);
}
public int getY(){
return(this.y);
}
public int getId(){
return(this.id);
}
public ImageIcon getImage(){
//System.out.println(this.image);
return(this.image);
}
public String[] getFlags(){
return(this.flags);
}
public boolean testFlag(String test){//returns true if flag is not present
return(java.util.Arrays.asList(this.flags).indexOf(test)==-1);
}
}

创建wallTile的实例并调用Tile中定义的方法总是返回nulle.x:

WallTile wall = new WallTile(3,7);
System.out.println(wall.getImage());//returns null

但是,如果我从Tile中复制一个函数并将其粘贴到WallTile中,该函数将返回正确的值。

是否有任何调用在tile中定义的函数与WallTile的实例,而不必复制在tile中定义的所有函数到WallTile?

简单修复。InTile

public class Tile
{
...
protected ImageIcon image;
^^^^^^^^^

changeimagetoprotected.

然后在WallTile中去掉image的声明,遮蔽了Tile的声明。protected将授予WallTileimage成员的访问权限。

平铺

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class Tile
{
private int x;
private int y;
private int id;
private ImageIcon image;
private String[] flags;

public Tile(int x, int y, int id, ImageIcon image, String[] flags){
this.x=x;
this.y=y;
this.id=id;
this.image=image;
this.flags=flags;
}

public int getX(){
return(this.x);
}
public int getY(){
return(this.y);
}
public int getId(){
return(this.id);
}
public ImageIcon getImage(){
//System.out.println(this.image);
return(this.image);
}
public String[] getFlags(){
return(this.flags);
}
public boolean testFlag(String test){//returns true if flag is not present
return(java.util.Arrays.asList(this.flags).indexOf(test)==-1);
}
}

WallTile

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class WallTile extends Tile
{
private int x;
private int y;
private int id=1;
private ImageIcon image;
private String[] flags;

public WallTile(int x, int y)
{
super(x,y,1,Sprites.WALLTILE1_SP,new String[]{"[IMPASSABLE]", "[SIGHT_BLOCKER]"});
this.x=x;
this.y=y;
}
}

最新更新