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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hejinzhong 中级黑马   /  2014-9-8 10:59  /  1035 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hejinzhong 于 2014-9-8 11:08 编辑

http://bbs.itheima.com/thread-142116-1-1.html 参考上一个帖子

  1. //分别运行父类和子类中的main方法
  2. public class Parent {

  3.         public void init(){
  4.                 System.out.println("1.parent");
  5.                 this.Demo();
  6.         }
  7.         
  8.         public static void Demo(){
  9.                 System.out.println("2.parent");
  10.         }
  11.         
  12.         public static void main(String[] args) {
  13.                 Parent parent = new Son();
  14.                 parent.init();
  15.         }
  16. }
  17. ----------------------------------------------------------------------------------------
  18. public class Son extends Parent {

  19.         public void init(){
  20.                 super.init();
  21.                 System.out.println("3.son");
  22.                 this.Demo();
  23.         }
  24.         public static void Demo(){
  25.                 System.out.println("4.son");
  26.         }
  27.         
  28.         public static void main(String[] args) {
  29.                 Son son = new Son();
  30.                 son.init();
  31.         }
  32. }
  33. 还是老规矩,解释的清澈前三有黑马币!
复制代码

评分

参与人数 1技术分 +1 收起 理由
付江涛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 孤鸢 于 2014-9-8 15:04 编辑

上线竟然得到了黑马币,很激动呀,正缺黑马币,跟到这个帖,给楼主捧捧场,也算对得起楼主的黑马币吧:lol
这题给demo()加了static修饰,还是考多态中子父类的成员特性。多态中,成员变量和静态方法都是跟所在类静态绑定的,只有非静态方法是动态绑定。涉及到多态,程序运行时总是参考子类对象,因此从这可以判定不管运行哪个main方法,结果是一样的。
接下来就是输出是什么的问题,因为demo()变成了静态方法,因此在调用的时候就是参考引用所在类,父类this指的是parent,子类this指的是son,最后结果
1.parent
2.parent
3.son
4.son

评分

参与人数 1黑马币 +3 收起 理由
hejinzhong + 3 赞一个!

查看全部评分

回复 使用道具 举报
运行第一个就是多态问题,通过基类指针访问子类方法,
所以不管运行哪个,执行顺序不变。
1.parent
2.parent
3.son
4.son
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马