【问题标题】:Accessing an inner class´ method from another inner class从另一个内部类访问一个内部类的方法
【发布时间】:2016-04-19 07:52:38
【问题描述】:

我尝试从另一个内部类访问一个内部类方法。两个内部类都在同一个外部类中声明:

class OuterFoo{

    class innerFoo1{

        public void methodFoo1(){
            System.out.println(" Hello, i am in the inner foo 1");
        }
    }

    class innerFoo2{

        public void methodFoo2(){
           System.out.println(" Hello, i am in the inner foo 2");
        }
    }
}

现在,我想从methodFoo2 访问methodFoo1

任何帮助将不胜感激。

【问题讨论】:

  • 与访问任何类的实例方法一样:您需要对该类的实例的引用。

标签: java methods inner-classes


【解决方案1】:

您需要引用另一个内部类的实例。像这样:

public class OuterFoo {
    private class InnerFoo1 {
        private void helloFoo1 () {
            System.out.println("foo1");

            InnerFoo2 foo2 = new InnerFoo2();
            foo2.helloFoo2();
        }
    }
    private class InnerFoo2 {
        private void helloFoo2 () {
            System.out.println("foo2");

            InnerFoo1 foo1 = new InnerFoo1();
            foo1.helloFoo1();
        }
    }
}

【讨论】:

    【解决方案2】:

    根据你希望你的真实程序应该做什么(如果你不需要实例化类 InnerFoo 并且只需要调用一个静态方法),你也可以创建类 innerFoo2 和方法 @987654322 @静态。

    public class OuterFoo{
    class innerFoo1{
        public void methodFoo1(){
            System.out.println(" Hello, i am in the inner foo 1");
            OuterFoo.innerFoo2.methodFoo2();
        }
    }
    static class innerFoo2{
        public static void methodFoo2(){
            System.out.println(" Hello, i am in the inner foo 2");
        }
    }
    

    }

    【讨论】:

      【解决方案3】:

      如果你的内部类被实例化为OuterFoo

      你可以这样做:

      class OuterFoo{
          final innerFoo1 if1 = new innerFoo1();
          final innerFoo1 if2 = new innerFoo2();
      
          class innerFoo1{
              public void methodFoo1(){
                  System.out.println(" Hello, i am in the inner foo 1");
                  if2.methodFoo2();
              }
          }
      
          class innerFoo2{
              public void methodFoo2(){
                  System.out.println(" Hello, i am in the inner foo 2");
                  if1.methodFoo1();
              }
          }
      }
      

      【讨论】:

        【解决方案4】:

        试试这个代码

        public class OuterFoo{
        
            class innerFoo1{
        
                public void methodFoo1(){
                    System.out.println(" Hello, i am in the inner foo 1");
                }
            }
        
            class innerFoo2{
        
                public void methodFoo2(){
                    System.out.println(" Hello, i am in the inner foo 2");
                }
            }
        
            void displayInnerFoo1(){
                innerFoo1 object1= new innerFoo1();
                object1.methodFoo1();
        
            }
        
            void displayInnerFoo2(){
                innerFoo2 object2= new innerFoo2();
                object2.methodFoo2();
        
            }
            public static void main(String args[]){ 
                OuterFoo objectParent= new OuterFoo();
                objectParent.displayInnerFoo1();
                objectParent.displayInnerFoo2();
        
        
            }
        
        }
        

        【讨论】:

          【解决方案5】:

          创建内部类的对象,然后简单地使用点运算符来访问它。

          ClassName obj = new ClassName();
          obj.MethodName();
          

          【讨论】:

            猜你喜欢
            • 2015-05-20
            • 1970-01-01
            • 1970-01-01
            • 2019-06-07
            • 2020-02-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-26
            相关资源
            最近更新 更多