2014-10-18 126 views
0

我有这2类在派生类中实现一个抽象方法静态

class A { 

public void foo1() { 
...;  
foo2();  
...;   
} 


protected abstract foo2(); 

} 




class B extends A { 

public foo2() {  
......  
} 

我需要foo2的是静态的,所以我可以做B.foo2(),但我也想在A类的功能,以保持.n

有什么建议吗?

}

+0

如果它是抽象的,则类“A”中没有'foo2'功能。而'B'必须为继承链实现'foo2'才有效。 – 2014-10-18 02:21:31

+3

你不能做你所问的技术(在子类中使抽象方法变为静态)。但是你试图解决的实际问题是什么?询问你想解决的高层次问题;不要问一个可感知的技术解决方案。 (见[X-Y问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)] – 2014-10-18 02:24:27

回答

0

您无法重写静态方法或将静态方法实现为抽象方法。

静态方法是在类定义上定义的,而不是在类实例上定义的。抽象方法在类实例上定义。

0

你说的事实上没有意义。

虽然我不太明白为什么你需要做的,有一种变通方法:

class B { 
    @Override 
    public void foo() { 
     fooUtil(); 
    } 

    public static void fooUtil() { 
     // your impl here 
    } 
} 

然后,你可以做B.fooUtil()代替,并用自己的行为来覆盖A.foo()

相关问题