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

Может ли кто-нибудь мне помочь, как мне вызвать метод print() из другого класса Java, который имеет основной метод?Как вызвать метод абстрактного внутреннего класса из другого класса?

+1

Вы не можете вызвать метод абстрактного класса, если это не статическое – alfasin

+1

Попросите экземпляр внешнего класса для создания конкретного экземпляра абстрактного внутреннего класса и вернуться затем вызовите метод на возвращаемом объекте. –

ответ

0

Вы не можете создать экземпляр абстрактного класса, поэтому для вызова метода экземпляра этого класса вам необходимо подклассифицировать его.

Чтобы подклассировать его, вам необходимо реализовать его абстрактные методы.

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

Есть один способ сделать это, хотя на практике вы, вероятно, хотите сделать это по-разному, один из способов было бы, как JBNizet предполагает иметь метод в OuterClass возвращать тип InnerClass, который вы хотите.

0

С InnerClass: non 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; 
     } 

    } 
} 
Смежные вопросы