Because Thread.currentThread().getName() gets you the name of the currently-running thread, but getName() resolves to st.getName(), and st is always your first thread instance.
Why does getName() resolve to st.getName()?
1. During construction of your second through fourth threads, you pass the first thread in as an argument and save it in the instance member st.
2. The run method of your threads calls st.show(), so they're always calling show on the first thread. (If you ever started the first thread, you'd get an NPE there, since the first thread's st member is never given a non-null value.)
3. Within show, this is therefore st (the first thread). Unqualified instance method calls use this as their instance, and this is the first thread.