使用实现接口的抽象类(Java)
我有这个界面,使用实现接口的抽象类(Java),java,interface,abstract-class,implements,Java,Interface,Abstract Class,Implements,我有这个界面, public interface IAnything { void m1(); void m3(); } 以及实现此接口的两个抽象类: public abstract class AbstractThing1 implements IAnything { public void m1() {} public void m3() {} } public abstract class AbstractThing2 implements IAnything {
public interface IAnything {
void m1();
void m3();
}
以及实现此接口的两个抽象类:
public abstract class AbstractThing1 implements IAnything {
public void m1() {}
public void m3() {}
}
public abstract class AbstractThing2 implements IAnything {
public void m1() {}
public void m3() {}
}
在我的代码中的某个地方,我想调用一个函数doSomething(类AbstractClass),该函数根据类AbstractClass的类型执行m1()
和m3()
如何定义和调用doSomething()
?我这样做了,但不起作用。谢谢
private <T extends IAnything> void doSomething(T kindOfAbstractClass) {
...
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
...
}
doSomething(AbstractThing1.class);
private void doSomething(T类抽象类){
...
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
...
}
doSomething(抽象事物1.class);
试试这个:
private void doSomething(IAnything kindOfAbstractClass) {
...
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
...
}
您的问题是,您提供的是类类型而不是实例作为doSomething的参数 请看下面修改的代码:
public class MyClass {
void doIt(){
doSomething(new ConcreteThing());
}
private <T extends IAnything> void doSomething(T kindOfAbstractClass) {
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
}
}
interface IAnything {
void m1();
void m3();
}
abstract class AbstractThing1 implements IAnything {
public void m1() {}
public void m3() {}
}
class ConcreteThing extends AbstractThing1{
}
公共类MyClass{
void doIt(){
doSomething(新事物);
}
私人无效剂量(T类抽象类){
kindOfAbstractClass.m1();
kindOfAbstractClass.m3();
}
}
接口和所有内容{
空m1();
空隙m3();
}
抽象类AbstractThing1实现IAnything{
公共无效m1(){}
公共void m3(){}
}
类ConcreteThing扩展了AbstractThing1{
}
似乎只有呼叫做了不正确的事情。不要传递类
,而是传递两个类之一的实例。但如果这些类是抽象的,我没有任何实例。是的,请阅读@gheese答案,您需要一个实例才能使用doSomething
。我假设你的代码中有一个。谢谢。但我应该这样称呼它吗?doSomething(抽象事物1.class);我在那里遇到了错误。您必须将和实例传递给doSomething方法,但抽象类不能直接实例化,因此您必须扩展抽象类以实现其抽象方法,然后将创建的新类的实例传递给doSomething。