2016-03-06 57 views
-5

在类中我会继承这些方法protected override,以便改变它使用的方法的行为。以下显示的是练习,对吗?如果不是,为什么?将方法置于“返回”中,使用Java,是否正确?

简单类型的和不可改变的对象:

class A{ 
    (...) 
    public int aA(){ 
     int b=1; 
     return this.bB(b); // It is about this place. 
    } 

    protected int bB(int b){ 
     b=2*b; 
     return b; 
    } 
    (...)  
} 

class B extends A{ 
    (...) 
    @Override 
    protected int bB(int b){ 
     return b-1; 
    } 
} 

在A类,我想使用的方法BB()的方法AA(),两种方法在此类实施。方法bB()我把“返回”方法aA()。然后B定义一个继承自A的类,并覆盖方法bB()。因此,类B中的方法aA()与A类中的方法aA()不同。

如果将方法返回,返回具有修改能力的对象,该怎么办? 因为它将静态方法作为回报? 这是否对并发编程有任何影响?

+0

您只能在您的示例中返回整数。 – Basilevs

+1

https://en.m.wikipedia.org/wiki/Template_method_pattern – Basilevs

+2

了解如何返回lambda表达式。 –

回答

1

您似乎在问上述代码是否是编写覆盖超类中方法的方法的正确方法。

是的,这是正确的做法。

是的,这是一个很好的方式,以“改变行为” ......虽然你只改变了行为的新类(B

如果有能力返回的对象要修改什么?

相同的答案。

就像是返回静态和非静态方法一样?

编号静态方法是非多态的。您无法重写静态方法。

在你的例子中,如果bB是静态的,那么@Overrides注释会给你一个编译错误。如果您将其删除,您会发现拨打 aA的电话将始终呼叫A.bB,并且永远不会拨打B.bB

请注意,调用语法为this.someStaticMethod(...)的静态方法是合法的,但风格很差。看起来这个调用会是多态的,但事实上并非如此。

这是否对并发编程有任何影响?

没有特别的含义。


另一方面,如果您确实在询问返回其他方法的方法......您的示例代码不会这样做。

+0

我并不是说重写静态方法和插入静态方法。 –

+0

标题不准确,已更改。我认为在帖子中我很好地解释了我的意思,但显然还没有到最后。 –

+0

问题是*“把方法作为回报”*和*“把这个方法作为回报”*都是糟糕的英语,我很难理解你的真正含义。而你的示例代码没有帮助,因为它不会返回一个方法......如果这是你实际询问的。 –