如何将super分配给变量?
我想做到以下几点:如何将super分配给变量?
public class Sub extends Super {
public Sub(Super underlying) {
if (underlying == null) {
underlying = super; // this line is illegal
}
this.underlying = underlying;
}
@Override
public void method() {
underlying.method();
}
}
怎么能像这样做呢?
它看起来像你想实施delegation pattern。
简单扩展超级,并让您的IDE覆盖所有创建超级调用的方法。
然后替换“超级”。与“基础”。
容易出错,但就是这样。
public class Sub extends Super {
Super underlying;
public Sub(Super underlying) {
this.underlying = underlying;
}
@Override
public void f() {
underlying.f();
}
这不会做我想要的。例如,基础== null时的行为不同。 – 2013-02-26 17:15:44
您还没有正确理解Java中的super
关键字。请参考javadoc for super
如果你的方法会覆盖其父类的方法之一,您可以通过使用关键字super的调用重写的方法。您还可以使用超级指一个隐藏字段(虽然隐藏字段气馁)
此外,super()
用来调用父类的构造函数。
public class Sub extends Super {
public Sub(Super underlying) {
this.underlying = (underlying == null)
? new Super()
: underlying;
}
@Override
public void method() {
underlying.method();
}
}
由于正在创建另一个对象,它不完全相同,但它的行为与预期相同。
我不认为这是干净的做法。如果您的原始对象具有某个状态,则此解决方案会导致问题,因为新创建的超级对象可能不具有相同的状态。因此,按照@Patricia的建议检查'null'会更好。 – 2015-09-09 15:36:51
我认为像你想可以做什么,如果你愿意加入,并呼吁,对于所涉及的方法的具体子类,方法名:
public class Test {
public static void main(String[] args) {
Super sup = new Super();
Sub sub1 = new Sub(null);
Sub sub2 = new Sub(sup);
sub1.subMethod();
sub2.subMethod();
sup.method();
}
}
class Super {
public void method(){
System.out.println("Using method from "+this);
}
}
class Sub extends Super {
private Super underlying;
public Sub(Super underlying) {
if (underlying == null) {
underlying = this;
}
this.underlying = underlying;
}
public void subMethod() {
underlying.method();
}
}
你正在尝试使用此代码来解决? – 2013-02-26 17:03:52
为什么不简单地在重写的方法内使用'super.method()',那么'underlying.method()'的需求是什么?为什么你在做什么,你在做什么,将高度赞赏:-) – 2013-02-26 17:06:40
为什么你不直接调用'super'? – moeTi 2013-02-26 17:06:47