《java之中的静态变量与静态方法的继承与覆盖问题》由会员分享,可在线阅读,更多相关《java之中的静态变量与静态方法的继承与覆盖问题(2页珍藏版)》请在人人文库网上搜索。
1、java之中的静态变量与静态方法的继承与覆盖问题/*class AApublic static void a()System.out.println(a);class B extends AA/static void bb()/ a();/class Test public static void main(String args) B.a();/输出a,证明静态方法可以被继承*/在子类中并没有必要通过再造一个方法,在这个方法中调用父类中的方法。/子类默认的继承了父类的所有方法。也就是说,通过子类类名(对于静态/方法来说)或对象名来直接调用父类的方法。/不能被覆写,例子:class Aprot。
2、ected static int num=2;public static void a()System.out.println(a);class B extends Aprotected static int num=4;public static void a()System.out.println(b);public class Test1 public static void main(String args) A a = new B();a.a();/输出结果是a,说明静态方法不能再子类之中被覆盖。System.out.println(a.num);/输出2,说明静态变量是不能被在子类。
3、中被覆盖的。System.out.println(A.num);System.out.println(B.num);/通过类名调用被覆盖的静态变量可以显示子类的被覆盖的静态变量。/java不推荐用对象调用static方法,这会使人混淆,请大家注意。但编译的时候,静态变量的值已经确定,/而对于多态中的编译问题,对于一个静态变量java只会看父类之中是不是有这个变量。也就是说多态对于/静态变量和静态方法是没有作用的。/java的这个规定是可以理解的。静态的说明只有一个固定的地址,一旦确定之后,就不能更改。而java中/的多态是指当子类中的方法或变量覆盖了父类中的时,编译的时候,java首先不会确定他们的具体内容,/当具体执行时看其属于什么子类在确定最后的执行。这样的话两者正好相互矛盾。因此,静态的问题并不/存在多态问题,因为它是一成不变的。/将变量定义为public可见性还是protected可见性,都可以通过类名或者对象名来直接调用它,而不需要/通过特定的方法get#(。