0

Так что мне нужно иметь пример наследования в этом коде, и я пытаюсь его получить, поэтому я создаю private BufferedImage image в родительском классе и затем беру на себя различные формы в дочерних классах, таких как Player, Enemy и возможно, ключ. Каждый из них будет иметь свой конкретный образ внутри них (также это будет хорошим примером полиморфизма?). Вот код:Невозможно использовать переменную (ы) из родительского класса?

public class Entity { //hold things such as player, and values realted to that specific entity (nice especially for organization purposes) 
Image i = new Image(); 
MazeModel model = new MazeModel(); 

private BufferedImage image; //they all have images 
} 

class Player extends Entity{ 
image = i.getPlayer(); 

public void setPlayerStart(){ 
    model.setPlayerX(50); //sets the starting x position of the player's image 
    model.setPlayerY(50); //sets the starting y position of the player's image 
} 
} 
//these next two I will possibly add later if I have the time 
class Enemy extends Entity{ 
//nothing here for now 
} 

class Key extends Entity{ 
//nothing here for now 
} 
+0

Если вы хотите, чтобы определенные изображения соответствовали подклассам, вы должны определить его где-нибудь, правильно? –

+0

Да, я хочу сделать так, чтобы все они использовали одно личное изображение BufferedImage, но я не уверен, правильно это или нет. – user1234

ответ

1

private экземпляры класса не могут быть унаследованы от родительского класса ребенка, и вы не можете получить доступ в дочернем классе.

так private BufferedImage image;Entity класс не может быть виден в Player класс.

Совет: попробуйте сделать это private BufferedImage image; как protected BufferedImage image;, чтобы вы могли получить доступ к вашему ребенку (Player), а ваша переменная экземпляра также будет безопасной.

+0

Не работает, он все равно дает мне синтаксическую ошибку, когда я пытаюсь сделать image = i.getPlayer() ;? Неужели я не могу работать? – user1234

+0

и где вы определили метод getPlayer()? –

+0

Я думаю, что я заработал, создав новый экземпляр класса Image внутри проигрывателя вместо того, чтобы пытаться его создать в Entity, и продлить новый экземпляр i в Player. – user1234

0

изменение частным лицам.

общественное изображение BufferedImage;

+0

Использование 'protected' может быть более безопасным, чем просто public! – Docteur

+0

о, да. Правильно. –

0

Я бы использовал геттер и сеттер, чтобы сделать его доступным.

В вашем случае, вы можете сделать каждые внутренние значения частного и получить доступ к нему через геттер и сеттер:

public class Entity { 
    private Image i; 
    private MazeModel model; 
    private BufferedImage image; 

    // initialize these values when calling new 
    public Entity() { 
     this.i = new Image(); 
     this.model = new MazeModel(); 
    } 

    // create getter and setter 
    public BufferedImage getImage(){ 
     return this.image; 
    } 

    public void setImage(BufferedImage image){ 
     this.image = image; 
    } 

    public Image getI(){ 
     return this.i; 
    } 

    // other code... 
} 

class Player extends Entity { 
    public Player(){ 
     this.setImage(getI().getPlayer()); 
    } 

    //other code... 
} 

Кроме геттер и сеттер, вам нужно создать конструктор (общественное Entity() и общественного Player ()) для инициализации значений.

Смежные вопросы