如何参考;这";在抽象Java类中?
在Java中,是否可以在抽象类的方法中使用如何参考;这";在抽象Java类中?,java,this,abstract-class,Java,This,Abstract Class,在Java中,是否可以在抽象类的方法中使用this,而不仅仅是作为抽象类的子类的实例 abstract class MyAbstractClass <MyImplementingClass extends MyAbstractClass> { public abstract MyImplementingClass self(); } 抽象类MyAbstractClass{ 公共抽象MyImplementingClass self(); } 我在我使用的每个子类中都覆盖了
this
,而不仅仅是作为抽象类的子类的实例
abstract class MyAbstractClass <MyImplementingClass extends MyAbstractClass> {
public abstract MyImplementingClass self();
}
抽象类MyAbstractClass{
公共抽象MyImplementingClass self();
}
我在我使用的每个子类中都覆盖了它
class MyImplementingClass extends MyAbstractClass<MyImplementingClass> {
@Override public MyImplementingClass self() {
return this;
}
}
class MyImplementingClass扩展MyAbstractClass{
@重写公共MyImplementingClass self(){
归还这个;
}
}
但我想知道是否有更优雅的方法来做到这一点。特别是,一个不需要每个子类都覆盖像
self()
这样的例程的类,我相信您可以返回类的newInstance()
@Override public MyImplementingClass self() {
return MyImplementingClass.newInstance();
}
我相信,您可以返回类的
newInstance()
,使其表现为那样
@Override public MyImplementingClass self() {
return MyImplementingClass.newInstance();
}
在Java中重写方法时,可以将返回类型重写为原始类型的子类。此代码完全有效:
abstract class MyAbstractClass {
public MyAbstractClass self() {
return this;
}
}
混凝土等级:
class MyImplementingClass extends MyAbstractClass {
@Override
public MyImplementingClass self() {
return this;
}
}
这也是为什么您可以覆盖clone()
以返回准确的类型,而不仅仅是对象
:
public class SomeCloneable implements Cloneable {
@Override
public SomeCloneable clone() {
return new SomeCloneable();
}
}
在Java中重写方法时,可以将返回类型重写为原始类型的子类。此代码完全有效:
abstract class MyAbstractClass {
public MyAbstractClass self() {
return this;
}
}
混凝土等级:
class MyImplementingClass extends MyAbstractClass {
@Override
public MyImplementingClass self() {
return this;
}
}
这也是为什么您可以覆盖clone()
以返回准确的类型,而不仅仅是对象
:
public class SomeCloneable implements Cloneable {
@Override
public SomeCloneable clone() {
return new SomeCloneable();
}
}
我认为这里的问题是,您的
self()
方法返回MyImplementingClass
,而不是MyAbstractClass
您应该返回一个MyAbstractClass
,返回对象的动态类型将是相关的
我也不明白你为什么不直接使用这个?它返回具有正确动态类型的对象本身,无论在何处调用它。如果需要,您可以强制转换它。我认为这里的问题是,您的
self()
方法返回MyImplementingClass
,而不是MyAbstractClass
您应该返回一个MyAbstractClass
,返回对象的动态类型将是相关的
我也不明白你为什么不直接使用这个?它返回具有正确动态类型的对象本身,无论在何处调用它。如果需要语法错误,可以强制转换它?您能显示编译器不接受的代码吗?我认为这里的问题是您的
self()
方法返回MyImplementingClass
,而不是MyAbstractClass
。您应该返回一个MyAbstractClass
,返回对象的动态类型将是相关的。我也不明白你为什么不直接使用这个?它返回具有正确动态类型的对象本身,无论在何处调用它。如果你需要的话,你可以把它投得很好。这似乎确实是个问题。如果你能将上述内容作为答案发布,我可以接受它并结束主题。“…作为手头子类的实例,而不仅仅是抽象类的实例?”这就是这个已经是的。它始终是动态的实际类型,而不是当前封闭类的类型。语法错误?您能显示编译器不接受的代码吗?我认为这里的问题是您的self()
方法返回MyImplementingClass
,而不是MyAbstractClass
。您应该返回一个MyAbstractClass
,返回对象的动态类型将是相关的。我也不明白你为什么不直接使用这个
?它返回具有正确动态类型的对象本身,无论在何处调用它。如果你需要的话,你可以把它投得很好。这似乎确实是个问题。如果你能将上述内容作为答案发布,我可以接受它并结束主题。“…作为手头子类的实例,而不仅仅是抽象类的实例?”这就是这个已经是的。它始终是动态的实际类型,而不是当前封闭类的类型。