黑马程序员技术交流社区

标题: 面试小问题 [打印本页]

作者: ς高眼光の目标    时间: 2014-4-19 15:53
标题: 面试小问题
本帖最后由 ς高眼光の目标 于 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的写法正确吗?有区别吗?说出原因
复制代码



作者: ノtrack    时间: 2014-4-19 16:18
肯定有区别呀  
第一种只能调用一个方法   第二可以调用多个方法
作者: 刘晶    时间: 2014-4-19 16:20
都正确,如果里面的方法只有一个,这两种写法是一样的,但是里面有两个方法都想调用,用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

作者: 付江涛    时间: 2014-4-19 16:21
都正确。
2 取了个名字,可以调用多个方法
作者: 织语不如书    时间: 2014-4-19 16:26
1正确,匿名内部类创建子类实例直接调用方法
2不对的 show()方法不是方法复写,你的声明类型是Object类型,里面没有show()方法的,不会调用子类的show()方法
作者: skill20    时间: 2014-4-19 18:46
本帖最后由 skill20 于 2014-4-19 22:58 编辑

1没有问题,都可以调用show()方法;2错了:第二种是多态的应用,父类的引用指向了自己子类的对象。调用的是子类的方法。但要注意的是这个方法父类也有定义就ok,如果要调用子类特有的(不是覆盖的)那么要进行类型的强制转换。
作者: 清风有意    时间: 2014-4-19 19:01
1可以使用,这个对象调用自己的方法。
2是多态的问题,Object不能调用子类的方法show(),在eclipse中键盘敲击'.'的时候没有这个show()方法

作者: ς高眼光の目标    时间: 2014-4-19 19:59
呵呵,一道小题目难倒了那么多人,回去再努力努力才行,答案是1正确,2错误的多态的问题
作者: 执笔梦    时间: 2014-4-20 21:23
第一个对了:相当于继承Object类,然后创建自己本类的方法show(),可以调用。
第二个错了,创建的是一个子类对象,相当多态吧,因为Object类的没有show();方法(子类特有)。所有是调用不了的...要是对的话,求技分术




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