[英]Java calling inherited method always returns null
我有一個名為 WallTile 的 class
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;
}
}
}
繼承自 class 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 中定義的方法總是返回 null 例如:
WallTile wall = new WallTile(3,7);
System.out.println(wall.getImage());//returns null
但是,如果我從 Tile 復制其中一個函數並將其粘貼到 WallTile 中,則 function 會返回正確的值。
是否可以使用 WallTile 實例調用 tile 中定義的函數,而無需將 tile 中定義的所有函數復制到 WallTile?
簡單的修復。 在Tile
public class Tile
{
...
protected ImageIcon image;
^^^^^^^^^
將image
更改為protected
。
然后在WallTile
中刪除image
的聲明,它遮蔽了Tile
中的聲明。 protected
將授予WallTile
對其image
成員的訪問權限。
瓦
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);
}
}
牆磚
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.