2015-06-28 53 views
-3

我有一個關於繼承的簡單問題。目前,我正在製作一個簡單的程序,重新演示您在僞造Minecraft時修改自定義區塊的過程。基本Java繼承

我有超類Block

public class Block { 
    public String name; 
    public int id; 
    public int height = 16; 

    public Block(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void onRightClick() { 
     System.out.println("You Right Clicked!"); 
    } 

    public void setUnlocalizedName(String name) { 
     this.name = name; 
    } 
} 

然後我做了兩個子類。它們是相同的,但這僅僅是一個參考。

package com.andrewfurniss; 

public class GrassBlock extends Block { 
    public GrassBlock(int id) { 
     super(id); 
     this.setUnlocalizedName("DirtBlock"); 
    } 
} 

另一個類叫做DirtBlock。當我打印出它的名字時,它只打印出我聲明的第二個名字。這是爲什麼?

+1

你可以發佈「當我打印出姓名」的代碼嗎? –

+2

對不起,但我不清楚你在問什麼。 「你是什麼意思,」它只打印出我聲明的第二個名字......「」?我看到你只聲明瞭一次名稱字段。作爲一個方面說明,我會將所有字段設置爲私有的,而不是公共的,並且會考慮創建可以使用id和name的構造函數,然後通過超級構造函數調用來設置該名稱。 –

+1

輸出是什麼?爲什麼這不是意外? – HuStmpHrrr

回答

0

也許你正在做的:

public void ToDo(){ 
    Block b = new GrassBlock(0); 
    b = new DirtBlock(1); 

    System.out.println(b.getName()); 
} 

? 我們需要你使用的代碼打印然後命名...

我編輯,你爲什麼要在grassblock ctor上寫「dirtblock」?也許可以。

1

這是因爲你在GrassBlock設置一個錯誤的名稱:

this.setUnlocalizedName("DirtBlock"); 

可能是一個複製粘貼錯誤。

+0

這就是感謝! –