基本Java继承

基本Java继承,java,inheritance,Java,Inheritance,我有一个关于继承的问题。目前,我正在制作一个简单的程序,在使用forge修改Minecraft时,重新执行制作自定义块的过程 我有超级类块: public class Block { public String name; public int id; public int height = 16; public Block(int id) { this.id = id; } public String getName() {

我有一个关于继承的问题。目前,我正在制作一个简单的程序,在使用forge修改Minecraft时,重新执行制作自定义块的过程

我有超级类

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;
    }
}
this.setUnlocalizedName("DirtBlock");
然后我做了两个儿童班。它们是相同的,但这里有一个仅供参考

package com.andrewfurniss;

public class GrassBlock extends Block {
    public GrassBlock(int id) {
        super(id);
        this.setUnlocalizedName("DirtBlock");
    }
}
另一个类称为
DirtBlock
。当我打印出名字时,它只打印出我第二次声明的名字。为什么会这样?

也许你在做:

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

   System.out.println(b.getName());
}
??? 我们需要你用来打印的代码然后是你的名字


我编辑,你为什么在grassblock上写“dirtblock”??可能是这样。

这是因为您在
GrassBlock
中设置了错误的名称:

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;
    }
}
this.setUnlocalizedName("DirtBlock");

可能是复制粘贴错误。

你能把“当我打印姓名时”的代码贴出来吗?对不起,我不清楚你在问什么。你说的
“它只打印出我第二次声明的任何名称…”是什么意思?我看到您只声明了一次名称字段。作为一个旁注,我将使所有字段都是私有的,而不是公共的,并且会考虑创建可以获取ID和名称的构造函数,然后通过超级构造函数调用来设置名称。输出是什么?为什么这不是意外的?您在超类中有一个名称的getter,但名称是公共的。公开所有字段可能是不好的做法。在超类中,通常将它们设置为私有或受保护(对于继承行为私有)。