如何在java中访问外部类中的方法?

如何在java中访问外部类中的方法?,java,class,nested,outer-join,Java,Class,Nested,Outer Join,我有如下课程: class myClass1 { public void test() {}; class myClass2 { public void test() {}; class myClass3 { test(); .................... } } } 如何确保方法测试来自myClass 1而不是myClass 2? 谢谢。只要做我的class1.this.test 顺便说一句,在Java中,以大写字母开头的类名是一种非常强大的约定。如果

我有如下课程:

 class myClass1 {
   public void test() {};

 class myClass2 {

  public void test() {};
 class myClass3 {
    test();
....................
 } } }
如何确保方法测试来自myClass 1而不是myClass 2? 谢谢。

只要做我的class1.this.test


顺便说一句,在Java中,以大写字母开头的类名是一种非常强大的约定。

如果调用对象,它将始终是对象类中的方法:

MyClass2 testObject = new MyClass2();
testObject.test(); // calls method from MyClass2
如果方法是静态的,则在调用时必须指定类:

MyClass2.test();
或者,如果您有一个MyClass3对象并希望调用MyClassTest:


您需要创建myClass1的对象来调用此方法。在class2不扩展class1之前,不能直接调用方法

myClass1 obj = new myClass1();
obj.test();

遵循适当的Java命名约定


类名应为MyClass1

使用以下语法访问外部实例:

myClass1.this.test

myClass2.this.test

那么它是明确的


注意:正如其他人正确指出的,带有小m的myClass1是一个不好的类名。因此,在上面的代码示例中,乍一看似乎我访问了myClass1的一个实例,但实际上我访问该类是为了获得当前的封闭实例。当遵循命名约定时,这是显而易见的:MyClass1.This返回该特定实例

为了确保调用正确的测试方法,只需在测试方法实现中插入几行System.out.println,例如在myClass1的测试中:System.out.println这是myClass1中的主要测试方法,并按照您习惯的方式调用这些方法。-1:这不是真的。因为myClass2不是静态的,所以它有一个对myClass1的封闭实例的隐式引用,通过它可以调用方法。
MyClass1.this.test(); 
// will run the method from MyClass1, even if its a MyClass3 object
myClass1 obj = new myClass1();
obj.test();