关于继承和多态的一个问题,在上课的时候,老师曾提到一个问题,如下
老师给出了原因好像是说什么静态方法是不被继承的。但是我对这个说法其实不太赞同。我还是认为只有构造方法是不被继承的(私有属性、方法等我认为是继承的,但是问题在于能不能访问得到),而且在创建子类型对象时候应该是默认会建一个父类型对象蕴含其中。所以这个题的真正解释应该是在调用静态方法时,底层会识别它所对应的类,将其自动转换成对应的Base.test()和Child.test(),并相应执行对应的代码块。
另写一个证明程序如下,可以试着运行一下。
package ProcessAndThread.thread;
public class ThreadTest6 {
public static void main(String[] args) {
//创建线程对象
Thread t = new MyThread();
t.setName("t");
t.start();
//调用sleep()方法
try {
//问题:这行代码会让线程t进入休眠状态吗
//答案:不会,sleep()S一个静态方法,t在执行的时候会识别它的类,转换成Thread.sleep()
//而其作用是让当前线程休眠,则代表main线程睡眠
t.sleep(1000 * 3);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("hello world");
}
}
class MyThread extends Thread {
@Override
public void run() {
for (int i=0;i<100;i++) {
//是谁在运行,就输出的是谁的name
Thread currentThread = Thread.currentThread();
System.out.println(currentThread.getName() + "--->" + i);
}
}
}