黑马程序员技术交流社区

标题: 静态方法的覆写问题 。 [打印本页]

作者: 袁园    时间: 2012-11-26 17:17
标题: 静态方法的覆写问题 。
父类静态方法能被子类继承覆写么,可以实现多态么?
作者: 李有    时间: 2012-11-26 17:20
可以继承
子类和父类可以有相同返回类型、方法名、参数列表的静态方法,如果从这个层面讲,子类算是override父类的静态方法吧。
但准确的讲此时只是子类对父类静态方法的隐藏(hide),子类的静态方法完全体现不出多态,就像子类字段隐藏父类的字段一样,在利用引用访问对象的字段或静态方法时,是引用类型(type)决定了事实上访问的是哪个字段,而非当前引用实际代表的是哪个类。因此,子类静态方法不能覆盖父类静态方法。

另外,在jdk1.5之前,覆盖要求子类方法的返回类型与父类的方法严格一致,但jdk1.5和其后,子类方法的返回类型可以是父类方法返回类型的子类。
Java中,多态有两种方式: 重载和重写
重载是发生同一个类内,方法同名,但参数不同
重写则发生在子类内,静态方法是属于类方法,由类直接调用,子类无法调用父类的静态方法
静态方法可以重载,不可以重写,因此是有多态的
作者: 快乐之恋    时间: 2012-11-26 17:51
static方法是可以被继承的。比如package static_; public class M {    public static void test() {        System.out.println("in m");    }} class T extends M {     public static void testtttttt() {        test();        System.out.println("in t");    } }
1:  private方法不能被继承但可以重写:若重写: 父类  a=new 子类() a编译时父类决定调用的方法,运行时调用的方法是子类的方法
   2:  static 方法能被继承可以重写:若重写: 父类  a=new 子类() a编译时引用类决定调用的方法,运行时调用的方法是引用类的方法
   3:  final 方法不能被继承和重写





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2