The question is contained inside the comment in Main.java
Asd.java
public class Asd {
private AsdInner asdg;
public static abstract class AsdInner {
public abstract void run();
}
public void setInner(AsdInner asdinner){
asdg = asdinner;
}
public void call(){
asdg.run();
}
}
Main.java
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Asd asd = new Asd();
asd.setInner(new Asd.AsdInner() {
//there is only 1 copy of Asd.AsdInner in memory,
//I am setting that very single copy's run() method to
//print out "asd"
public void run() {
System.out.println("asd");
}
});
asd.call(); //output: asd
Asd asd2 = new Asd();
asd2.setInner(new Asd.AsdInner() {
//there is only 1 copy of Asd.AsdInner in memory,
//I am setting that very single copy's run() method to
//print out "asd2"
public void run() {
System.out.println("asd2");
}
});
asd2.call(); //output: asd2
asd.call(); //output: asd, why is it not asd2?? it should be asd2 because I already set that very single copy's run method to be "asd2"
}
}