如何在Thread线程中调用同名的外部类A的getState方法?
如何在内部Thread的run方法中调用外部类的同名方法?
这个问题本质是匿名内部类的方法命名冲突——因为你创建的匿名Thread子类继承了Thread类,而Thread本身就有getState()方法,直接调用时JVM会优先选择父类的方法,而非外部类A的。这里有两种简单直接的解决办法:
方法一:用外部类名.this明确指定外部类实例
这是Java里解决内部类与外部类方法命名冲突的标准写法,通过A.this直接引用外部类A的当前实例,精准调用它的getState()方法:
class A { public void getState() { System.out.println("Okay"); // 期望被调用的方法 } public void exampleCall() { new Thread() { @Override public void run() { A.this.getState(); // 现在会正确调用A类的getState } }.start(); } }
方法二:提前保存外部类实例引用
如果你觉得A.this的写法不够直观,也可以在外部类方法里先把当前实例存到一个变量中,再在匿名内部类里通过这个变量调用方法:
class A { public void getState() { System.out.println("Okay"); // 期望被调用的方法 } public void exampleCall() { A outerInstance = this; // 保存外部类当前实例 new Thread() { @Override public void run() { outerInstance.getState(); // 通过保存的实例调用目标方法 } }.start(); } }
两种方法都能解决你的问题,个人更推荐第一种,它是Java官方认可的简洁写法,一眼就能看出是在引用外部类的实例。
内容的提问来源于stack exchange,提问作者midorlo
相关产品推荐
相关产品推荐

