黑马程序员技术交流社区
标题:
Override覆盖
[打印本页]
作者:
秦冲
时间:
2011-11-4 11:02
标题:
Override覆盖
public class Parent {
public static String say() {
return "parent static say";
}
public String say2() {
return "parent say";
}
}
public class Child extends Parent {
public static String say() {
return "child static say";
}
public String say2() {
return "child say";
}
}
public class OverrideTest {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.say());
System.out.println(p.say2());
}
}
复制代码
结果:
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