黑马程序员技术交流社区

标题: 谁能给出一个正确输出的结果,和理论依据 thank u~ [打印本页]

作者: 赵宇    时间: 2012-9-19 13:58
标题: 谁能给出一个正确输出的结果,和理论依据 thank u~
本帖最后由 赵宇 于 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");
}
}


作者: 陈俊来    时间: 2012-9-19 14:11
输出的是N,
M m = new N();
新创建了N对象,N是M的子类,N继承了M,他们都有共同的方法output(),子类对父类的output()方法,进行了重写,所以,最后输出的是子类的结果
也就是N
作者: 尤圣回    时间: 2012-9-19 14:14
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");
}
}
作者: 赵宇    时间: 2012-9-19 14:16
吕书凯 发表于 2012-9-19 14:08
正确的代码:
public class StaticTest3
{

谢谢你的回答
帮我看一下这个呢http://bbs.itheima.com/thread-26049-1-1.html
作者: 赵宇    时间: 2012-9-19 14:17
陈俊来 发表于 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:17
尤圣回 发表于 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 15:23
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 15:55
父类 不是静态 子类 也不要是静态 静态不能访问非静态  然后就是 你的子类方法覆盖了父类方法 打印结果是n




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