So I got this weird scenario that works fine but doesn't make any sense as to why it works. From my experience in C++, I'm very sure that this will not work at all and will throw an error during compilation.
public class Practice { private void testFunction() { System.out.println("working fine"); System.out.println("testFunc: " + this); } public void start() { System.out.println("start: " + this); new Thread(new Runnable() { @Override public void run() { System.out.println("run: " + this); testFunction(); } }).start(); } } // Inside main Practice practice = new Practice(); practice.start() Output
start: com.company.Practice@5e2de80c run: com.company.Practice$1@6720b744 working fine testFunc: com.company.Practice@5e2de80c WHY!? why did this work? How am I able to call testFunction() from a Runnable? Shouldn't I create a new instance and then call that function like Practice p = new Practice(); p.testFunction()? How does Java know that testFunction() is part of Practice class and not Runnable?
And also, how come the value of this in testFunction() is same as start()? Shouldn't it be same as run()?
没有评论:
发表评论