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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

  m.output();
}
}

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

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

8 个回复

正序浏览
父类 不是静态 子类 也不要是静态 静态不能访问非静态  然后就是 你的子类方法覆盖了父类方法 打印结果是n
回复 使用道具 举报
翁鹏 高级黑马 2012-9-19 15:23:29
7#
public class StaticTest3                                      //首先说一下  你这个问题属于 多态 的问题
{                                                                        //还有你的代码确实是有问题, 编译不通过 ,当子类重写父类方法时,方法头必须一模一样。
public static void main(String[] args)                         你的子类方法变成static的了
{
  M m = new N();//父类引用指向子类对象
  m.output();
}                                                                          
如果代码正确你的程序的输出结果是:     N
}                                                          多态中 父类的引用 只能调用 父类和子类都有的方法, 不能调用子类特有的方法。(你这个父类与子类都有output方法)
class M                                                              在实际的调用中 父类的引用是调用子类对象中的方法 即在这是调用的 N对象中的output()方法。
{
public void output()
{
  System.out.println("M");类
}
}
class N extends M
{
public static void output()
{
  System.out.println("N");
}
}

回复 使用道具 举报
尤圣回 发表于 2012-9-19 14:14
public class StaticTest3
{
public static void main(String[] args)

谢谢你的回答
麻烦帮我看一下这个http://bbs.itheima.com/thread-26049-1-1.html
回复 使用道具 举报
陈俊来 发表于 2012-9-19 14:11
输出的是N,
M m = new N();
新创建了N对象,N是M的子类,N继承了M,他们都有共同的方法output(),子类对 ...

谢谢你的回答,帮我看一下这个。http://bbs.itheima.com/thread-26049-1-1.html
回复 使用道具 举报
吕书凯 发表于 2012-9-19 14:08
正确的代码:
public class StaticTest3
{

谢谢你的回答
帮我看一下这个呢http://bbs.itheima.com/thread-26049-1-1.html
回复 使用道具 举报
public class StaticTest3
{
public static void main(String[] args)
{
  M m = new N();
  m.output();
}
}
class M
{
public void output()
{
  System.out.println("M");
}
}
class N extends M         输出的是M  因为class N extends M
l里面的方法是静态的所以默认是不能重载

{
public static void output()
{
  System.out.println("N");
}
}
回复 使用道具 举报
输出的是N,
M m = new N();
新创建了N对象,N是M的子类,N继承了M,他们都有共同的方法output(),子类对父类的output()方法,进行了重写,所以,最后输出的是子类的结果
也就是N
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马