2014-07-06 65 views
0
public class OuterClass { 
    abstract class InnerClass { 
     int value = 20; 
     public void print(){ 
       System.put.println("Value = " + getValue()); 
     } 
     public abstract int getValue(); 
     } 
} 

有人可以幫助我,我如何從另一個具有主要方法的Java類調用方法print()?如何從另一個類中調用抽象內部類的方法?

+1

你不能調用一個抽象類的方法,除非它是靜態 – alfasin

+1

向外部類的實例來創建這個抽象內部類的具體實例,並返回它,然後在返回的對象上調用該方法。 –

回答

0

您不能實例化一個抽象類,因此要調用該類的實例方法需要對其進行子類化。

爲了繼承它,你需要實現它的抽象方法。

new OuterClass().new InnerClass() 
{ 
    public int getValue() 
    { 
     return 1; 
    } 
}.print(); 

是這樣做的一種方式,但在實踐中,你可能會想這樣做不同的,一個辦法是爲JBNizet建議將在OuterClass一種方法來返回所需的InnerClass類型。

0

由於InnerClassnon static您需要一個OuterClass的實例來訪問它。接下來,因爲它是抽象類,你需要一個實際上可以創建的實例的子類。從子類中,您可以使用super調用超類方法。我能想到的

一種方法是

public class HelloWorld { 


    public static void main(String args[]) { 

     OuterClass outerClass = new OuterClass(); 
     InnerSubClass myInstance = outerClass.new InnerSubClass(); 
     myInstance.print(); 
    } 
} 

class OuterClass { 

    private InnerSubClass myInstance; 

    abstract class InnerClass { 
     int value = 20; 
     public void print(){ 
       System.out.println("Value = " + getValue()); 
     } 
     public abstract int getValue(); 
    } 

    class InnerSubClass extends InnerClass{ 

     @Override 
     public void print(){ 
      super.print(); 
      System.out.println("In SUbclass"); 
     } 

     @Override 
     public int getValue() { 
      return 0; 
     } 

    } 
} 
相關問題