我想要的是:
我想要一个泛型,用来扩展抽象类“DogKennel”的类,而不是“公共空插入狗(对象对象)”方法中的“对象”。例如,如果我创建了一个名为“RetrieverDogKennel”的类来扩展“DogKennel”,我希望“RetrieverDogKennel”类的“插入狗(...)”方法中的参数只接受“检索”对象。虽然它看起来不像这个“插入狗(检索检索)”,但该方法会像它一样,只允许在其参数中使用检索对象。
public abstract class DogKennel
{
public void insertDog(Object object)
{
//does something and the object is not stored
}
}
public class RetrieverDogKennel extends DogKennel
{
public <T extends Retriever> void insertDog(T object)
{
//does something and the object is not stored
}
}
如果你想把另一个品种的狗放进猎犬场,我希望这是一个错误。
LabradorDogKennel labradorDogKennel = new LabradorDogKennel();
RetrieverDogKennel retrieverDogKennel = new LabradorDogKennel();
Labrador bullet = new Labrador();
Retriever buster = new Retriever();
Retriever sparky = new Retriever();
//No Error
retrieverDogKennel.insertDog(buster);
//Error
retrieverDogKennel.insertDog(bullet);
更新
您需要使这两个类都是泛型的,而不是子类方法:
public interface Dog {
}
public class Labrador implements Dog
{
}
public abstract class DogKennel<T extends Dog> {
public void insertDog(T dog) {
//does something and the dog is not stored
}
}
public final class RetrieverDogKennel extends DogKennel<Retriever> {
}
public final class GeneralDogKennel extends DogKennel<Dog> {
}
有了这些代码,RetrieverDogKennel
类就有了一个插入狗(Retriever dog)方法,实现继承自基类。
GeneralDogKennel
类有一个insertDog(Dog Dog)
方法,即它将接受任何类型的狗。
我有一个抽象类B,它扩展了另一个抽象类A。在抽象类A中,我有一个受保护的方法转换。我想测试方法foo,它从没有实现的基类调用方法convert。如果无法更改转换方法签名,如何模拟方法转换。 我使用Mockito.spy()调用真正的方法,但转换方法是不可用的嘲弄(通过Mockito.when(...)。 告诉我如何测试方法foo。
大约两个月前,我刚刚开始使用java,我正在尝试更多地理解抽象类。我理解抽象及其实现的基本思想,但我不明白为什么一个抽象类会扩展另一个抽象类,以及它添加了哪些功能。还有,我看到一个抽象类扩展了另一个抽象类,但它只实现了另一个抽象类的一个功能。 我确实查了一些示例代码,但它们只显示了实现,没有给出任何解释: 如您所见,抽象类并没有实现抽象类中的所有功能。它只实现函数。但是如果是具体的,那么就需要实现
我正在用Java构建一个库管理应用程序。 我有一个名为 的抽象类。它有一个称为 的抽象方法。 有一个名为< code>Newspaper的子类,它当然实现了< code>equals,其签名与< code>equals在< code>Material中的签名完全相同: Java无法解析< code > elementoacomparer 的任何方法。它们都存在于< code >报纸中,该报纸确实扩
问题内容: 抽象类是否必须至少具有一个抽象方法? 问题答案: 这篇文章的主题和正文提出了两个不同的问题: 它应该至少有一个抽象成员吗? 是否需要至少一个抽象成员? #2的答案肯定是“否”。 #1的答案是主观的,是风格的问题。我个人会说是的。如果您的目的是防止实例化一个类(没有抽象方法),那么最好的方法是使用构造函数,而不是对其进行标记。
这个子类重写了原始方法,而超类是一个抽象类。是否可以通过初始化为其子类的对象调用超类中的原始方法? 我想做的是: 我认识到上面的代码无法作为抽象类进行实例化,所以我尝试这样做:
我正在使用JavaFX8开发一个Java8桌面应用程序。 我在MainApp类(扩展application类的类)中有这个方法。 我会这样使用它: 有什么方法可以实现这种行为吗?