黑马程序员技术交流社区

标题: Override覆盖 [打印本页]

作者: 秦冲    时间: 2011-11-4 11:02
标题: Override覆盖
  1. public class Parent {

  2.         public static String say() {
  3.                 return "parent static say";
  4.         }

  5.         public String say2() {
  6.                 return "parent say";
  7.         }
  8. }

  9. public class Child extends Parent {
  10.         public static String say() {
  11.                 return "child static say";
  12.         }

  13.         public String say2() {
  14.                 return "child say";
  15.         }
  16. }

  17. public class OverrideTest {

  18.         public static void main(String[] args) {
  19.                 Parent p = new Child();
  20.                 System.out.println(p.say());
  21.                 System.out.println(p.say2());

  22.         }

  23. }
复制代码
结果:
parent static say
child say

为什么p.say()却是调用父类Parent的方法呢?
作者: 杨玉揆    时间: 2011-11-4 11:04
因为你那个是父类的引用啊 这是多态较为常见的用法
作者: 张晨    时间: 2011-11-4 11:15
实验已经说明 override 不会覆盖 静态方法(因为静态方法会在类初始化前进行初始化),只会覆盖普通方法{:soso_e100:}


作者: 姚志华    时间: 2011-11-4 11:16
静态方法不能被覆盖,当然调用父类的了
作者: 刘永昌    时间: 2011-11-4 11:29
static 的属性和方法都是不能覆盖的,因为static修饰的部分都是与对象无关的,它与对象没有依赖关系只与类有关,在类加载进来时就已经存在了。
你的对象引用变量是Parent,在编译时变量p就是指向Parent类的,虽然你new的是Child对象。
作者: 吉许    时间: 2011-11-4 11:31
在多态中成员函数的特点 :
在编译时期 : 参阅引用型变量所属的类中是否有调用的方法 , 如果有 , 编译通过 , 如果没有 , 编译失败 .
在运行时期 : 参阅对象所属的类中是否有调用方法 .
简单总结就是编译时看左边 , 运行时看右边 .
在多态中 , 成员变量的特点 :( 非静态的 )
无论编译和运行 , 都参考左边 ( 引用型变量所属的类 )
作者: 吉许    时间: 2011-11-4 11:33
一个: 一个(  连接被识别成表情了.囧囧
作者: 白倩    时间: 2011-11-4 11:35
Parent p = new Child();
这句话是子类引用指向了父类,
你那个方法是静态的,override不会覆盖static 方法,
如果你想让它覆盖父类方法把方法前的static修饰符去掉就会得到你想要的结果。

作者: 喻尚健    时间: 2011-11-4 13:06
JAVA静态方法形式上可以重写,但从本质上来说不是JAVA的重写。因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用)。
Parent p = new Child();编译时类型为父类,所以p.say()调用的是父类的方法;say2()是实例方法,运行时类型为child(),所以执行的是子类的方法。

作者: 乐行者广裁    时间: 2013-5-19 12:05
Parent p = new Child();
java静态方法,override不会覆盖static 方法
要想覆盖父类的方法,需去掉static。




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