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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ma464526717 中级黑马   /  2016-2-24 21:58  /  1106 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class TestA  {
    public void start()  {  System.out.println("TestA");  }
    }
    public class TestB extends TestA  {
    public void start()  {  System.out.println("TestB");  }
    public static v.id main(string[]  args)  (
    ((TestA)new TestB()).start();
    }
    }
    运行结果是哪项?
    A.  TeStA
    B.  TeStB
    c.编译失败
    D.运行时抛出异常

12 个回复

倒序浏览
   应该是选  B
回复 使用道具 举报
不会..........
回复 使用道具 举报
不会+1!!!!!!!!!!!!!!!
回复 使用道具 举报
huang_bing_hua 来自手机 中级黑马 2016-2-25 08:27:23
报纸
1.首先上述代码的大小写的规范性,代码正确性(void写错,应该是粗心导致的吧)以及阅读性有待提高
2.选项里出现的TeSta书写不规范,我理解成输出TestA
3.考察的知识点是多态成员方法访问的特点以及向下转型,
回复 使用道具 举报
huang_bing_hua 来自手机 中级黑马 2016-2-25 08:36:28
地板
最后一行代码其实就是TestA ta=new TestB();
                                        ta.start();
其实就是多态的向上转型,多态方法访问的特点:编译看左边(先看父类有没有start()方法,没有就报错),运行看右边(方法重写),
选b
回复 使用道具 举报
帮顶,哈哈
回复 使用道具 举报
xuecmg 中级黑马 2016-2-25 09:46:41
8#
B                                   
回复 使用道具 举报
选B 运行看左边 方法看右边 考察的是多态。
回复 使用道具 举报
zapoo 中级黑马 2016-2-25 10:33:34
10#
你这个编译肯定出错,修改之后选b
回复 使用道具 举报
既然都有时间来发帖,那运行一下不就知道了
回复 使用道具 举报
((TestA)new TestB()).start();你应该是这里看不明白吧!new TestB()先看这里是不是匿名对象,然后前面加(TestA)就是向下转型((TestA)new TestB())这还是匿名对象的书写直接.调用对象的方法.。当还原就是
TestA ff =(TestA)new TestB();然后就是ff..start();这样是不是很明了的编译看左边,运行看右边。所以运行的时候看
TestB()里面的start()方法
回复 使用道具 举报
huang_bing_hua 发表于 2016-2-25 08:36
最后一行代码其实就是TestA ta=new TestB();
                                        ta.start();
其实就 ...

你没有向下转这样写的结果是A
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马