A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵宇 于 2012-9-25 08:45 编辑

public class StaticTest3
{
public static void main(String[] args)
{
  M m = new N();
  m.output();
}
}

class M
{
public static void output()
{
  System.out.println("M");
}
}

class N extends M
{
public static void output()
{
  System.out.println("N");
}
}

10 个回复

倒序浏览
输出的是NM
回复 使用道具 举报
输出的是M
M m = new N();
这是M对象,
调用的是m.output()调用的是M的方法,static类型的方法只能调用一次,所以,是M
回复 使用道具 举报
输出的是Mclass N extends M
{
public static void output()
{
  System.out.println("N");
}  因为继承父类 父类中的 静态方法在子类中是被禁用的
回复 使用道具 举报
输出的是M
class N extends M
{
public static void output()
{
  System.out.println("N");
}  因为继承父类 父类中的 静态方法在子类中是被禁用的

回复 使用道具 举报
吕书凯 发表于 2012-9-19 14:20
子类是不能重写父类的静态方法的
静态方法不是父类的,而是公共的。公共的东西子类不能重写
public class S ...

输出结果是M

你的解释。。。可不可能是这个因为M m = new N()原因呢?
回复 使用道具 举报
赵宇 中级黑马 2012-9-19 14:34:54
7#
吕书凯 发表于 2012-9-19 14:33
嗯,m一开始就定义为M类型,所以调用的是M的静态方法

谢谢各位  不一一回复了
回复 使用道具 举报
输出结果是M
给你说一下多态中成员的特点就明白了
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
你这里方法是静态的,所以编译和运行都看左边,即父类M。
这里的左边指的是父类,即引用行变量;右边指的是子类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马