簡體   English   中英

Java 調用繼承方法總是返回 null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM