有两个问题,一直没弄明白class Fuu{int num 3public void show(){System.out.println(fu show)}}cla
有两个问题,一直没弄明白
class Fuu{ int num = 3; public void show(){ System.out.println("fu show"); } } class Zii extends Fuu{ int num = 4; public void show(){ System.out.println("zi show"); } } public class DuoTai {
public static void main(String[] args) { Fuu f = new Zii(); f.show(); System.out.println(f.num);
}
}
class Fuu{ int num = 3; public static void show(){ System.out.println("fu show"); } } class Zii extends Fuu{ int num = 4; public static void show(){ System.out.println("zi show"); } } public class DuoTai {
public static void main(String[] args) { Fuu f = new Zii(); f.show(); System.out.println(f.num);
}
}
1、show()方法在没加static关键字前,输出结果是zi show,加了之后变成了fu show求解为什么 2、f.num 的值为什么是3不是4? [解决办法] lz上网找找类初始化顺序问题就知道,包括父子和静态的 [解决办法] 1.静态的方法不被重写,所以f.show()是他自己的方法 2.向上转型:变量不能被重写 [解决办法] 第一个可能是因为非静态方法可被子类覆盖,而非静态方法不能被子类覆盖的缘故。 第二个是因为成员变量总是访问编译时的类型,如Fuu f = new Zii(),编译类型是Fuu,运行类型是Zii. [解决办法] 其实也好区别: 静态方法虽然可以用obj.func()方式调用,更多还是ClassName.func()方式调用的。这里引用的类名是什么,替换下实例即可:f.show();静态方法之后,索引类型替换,就是Fuu.show();