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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ς高眼光の目标 中级黑马   /  2014-4-19 15:53  /  1221 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ς高眼光の目标 于 2014-4-20 15:20 编辑
  1. 面试
  2.                 //1
  3.                 new Object(){
  4.                         void show(){
  5.                                 System.out.println("show run");                                
  6.                         }
  7.                 }.show();
  8.                 //2
  9.                 Object obj = new Object(){
  10.                         void show(){
  11.                                 System.out.println("show run");
  12.                         }
  13.                 };
  14.                 obj.show();
  15.                
  16.                 1和2的写法正确吗?有区别吗?说出原因
复制代码


8 个回复

正序浏览
第一个对了:相当于继承Object类,然后创建自己本类的方法show(),可以调用。
第二个错了,创建的是一个子类对象,相当多态吧,因为Object类的没有show();方法(子类特有)。所有是调用不了的...要是对的话,求技分术
回复 使用道具 举报
ς高眼光の目标 来自手机 中级黑马 2014-4-19 19:59:23
8#
呵呵,一道小题目难倒了那么多人,回去再努力努力才行,答案是1正确,2错误的多态的问题
回复 使用道具 举报
1可以使用,这个对象调用自己的方法。
2是多态的问题,Object不能调用子类的方法show(),在eclipse中键盘敲击'.'的时候没有这个show()方法
回复 使用道具 举报
本帖最后由 skill20 于 2014-4-19 22:58 编辑

1没有问题,都可以调用show()方法;2错了:第二种是多态的应用,父类的引用指向了自己子类的对象。调用的是子类的方法。但要注意的是这个方法父类也有定义就ok,如果要调用子类特有的(不是覆盖的)那么要进行类型的强制转换。
回复 使用道具 举报
1正确,匿名内部类创建子类实例直接调用方法
2不对的 show()方法不是方法复写,你的声明类型是Object类型,里面没有show()方法的,不会调用子类的show()方法
回复 使用道具 举报
都正确。
2 取了个名字,可以调用多个方法
回复 使用道具 举报
都正确,如果里面的方法只有一个,这两种写法是一样的,但是里面有两个方法都想调用,用2比较合适,非要用1,那必须在建立一个匿名对象再调用方法

例如
                //1
                new Object(){
                        void show(){
                                System.out.println("show run");                                
                        }                        void abc()
                          {
                                    System.out.println("abc");
                          }
                }.show();
                new Object(){
                        void show(){
                                System.out.println("show run");                                
                        }                        void abc()
                          {
                                    System.out.println("abc");
                          }
                }.abc();
                //2
                Object obj = new Object(){
                        void show(){
                                System.out.println("show run");
                        }
                            void abc()                          {
                                    System.out.println("abc");
                          }
                };
                obj.show();
                obj.abc();
               
             如果父类中没有abc的方法就不能用调用abc
回复 使用道具 举报
肯定有区别呀  
第一种只能调用一个方法   第二可以调用多个方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马