2014-03-27 316 views
0

这可能是基本的Java程序的方法,但是我是新来的语言,所以请原谅我扩展接口

我想延长的LivingEntity使得SetCustomName方法,除了它是正常的步骤,它也会抛出一个自定义事件/异常。

我试图做到这一点会导致关于抽象的错误,并且不能拥有正文。

另外,我不能说这是一个类还是一个接口,这意味着我不确定是否应该使用extends或implements。

最后,我正在寻找添加此功能,而不是创建一个新的对象。

你能告诉我,如果这是可能的/引导我在正确的方向吗?非常感谢你的帮助。

+1

一个'Interface'不能有一个“body” - 它是一个接口,用于将某些东西抽象为一个更“通用”的对象。你需要创建一个''''来实现你的''interface'',然后这个类需要实现这个方法的主体。 最后:寻找一个文件的签名时,你要么看到'名称或'class'前interface' - 这会告诉你它是否是一个接口或类... – Darwind

+0

@Darwind于是我找对于类公共类PetGuardLivingEntity扩展CraftLivingEntity实现LivingEntity? – Drazisil

+0

是的,这绝对是一个解决方案,然后实现(实际上'覆盖')'CraftLivingEntity'的'setCustomName'方法创建你自己实现的方法。 **编辑:**极度喜欢@Emerson Farrugia的回答:-) – Darwind

回答

1

LivingEntity是一个接口,CraftLivingEntity是一个类。你只能扩展一个类,实现一个接口。界面本身没有“正常步骤”。

如果你能控制CraftLivingEntity或不同类是否被实例化,延长CLE如下

public class MyCraftLivingEntity extends CraftLivingEntity { 

    @Override // just a marker annotation to help catch inheritance issues 
    public void setCustomName(String name) { 

     super.setCustomName(name); 

     // do whatever else 
    } 
} 

和实例化类代替。

+0

据我所知,我不能总是调用CraftLivingEntity。此外,即使有可能,我相信这会彻底打破我的世界的一切:) – Drazisil

+0

我对minecraft或bukkit一无所知,因此您需要其他人来帮助解决这个问题。 :S –

2

看了你的文件,你从GitHub给..

LivingEntity是一个接口,所以你必须落实到另一个类,因为它是不允许的方法来进行定义。

只要按照艾默生的重写方法,因为它是正确的。将您的自定义代码放在super.setCustomName(name);的调用下。