2015-10-16 51 views
-2

我有一個類的方法,我想讓執行到子類。例如:從孩子呼叫受保護的方法

public class Parent { 
protected void foo(){return null;} 
private void bar(foo()); 
} 
public class Child { 
@Override protected void foo(){//do something} 
} 

我想在bar方法中調用孩子的foo方法而不是父級方法。它總是調用父方法。 foo的方法不能是抽象的...

+0

,你可以使用'super.foo()'?編輯:你甚至使用繼承,因爲你的類聽起來像他們一樣,但實際上他們沒有。 – SomeJavaGuy

+0

不,我要調用的方法不在父類中,但是在子類 – Pink

+1

@Pink中:我可以看到您沒有擴展父類。你如何能夠覆蓋該方法? –

回答

7

Parent代碼,如果你這樣做:

this.foo(); 

...然後提供的對象是Child實例,它是Childfoo那將會被調用。這是多態性的重要組成部分。 (假設,當然,你添加extends ParentChild聲明。)

例子:(live copy on IDEOne

class Example 
{ 
    public static void main (String[] args) 
    { 
     new Child().bar(); 
    } 
} 
class Parent { 
    protected void foo() { 
     System.out.println("Parent#foo"); 
    } 
    public void bar() { 
     this.foo(); 
    } 
} 
class Child extends Parent { 
    @Override 
    protected void foo() { 
     System.out.println("Child#foo"); 
    } 
} 

輸出:

 
Child#foo