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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. interface Animal{
  2.         public abstract void show();
  3.        
  4. }
  5. class Outer{
  6.         public void method() {
  7.                 new Animal(){
  8.                         public void show() {
  9.                         }
  10.                 }.show();
  11.                  Animal  a= new Animal(){
  12.                         public void show() {
  13.                         }
  14.                 };
  15.                 a.show();//这里确可以编译通过
  16.                 new Object(){
  17.                         public void fun(){
  18.                         }
  19.                 }.fun();
  20.                 Object obj = new Object() {
  21.                                 public void fun() {
  22.                                
  23.                         }//
  24.                 };
  25.                 //obj.fun();   //  这里为什么编译错误
  26.                   
  27.         }
  28. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

4 个回复

倒序浏览
之所以a.show()编译通过,而obj.fun()编译没通过,是因为你把obj定义为Object类了,而Object类中是找不到fun()方法的,如果要obj能调用fun()方法,应该是去继承Object类,在让继承的类实现fun()方法。其实你写的那句  
  1. Object obj = new Object() {
  2.                                 public void fun() {
  3.                                 
  4.                         }//
  5.                 };
复制代码

在内部自动向上转型了,将=号右边的类向上转成了Object类了。如果还是要访问obj.fun()方法,可以
  1. interface Animal{
  2.         public abstract void show();
  3.         
  4. }
  5. class Outer{
  6.         public static void main(String[] args) throws Exception {
  7.                 new Animal(){
  8.                         public void show() {
  9.                         }
  10.                 }.show();
  11.                  Animal  a= new Animal(){
  12.                         public void show() {
  13.                         }
  14.                 };
  15.                 a.show();//这里确可以编译通过
  16.                 new Object(){
  17.                         public void fun(){
  18.                         }
  19.                 }.fun();
  20.                 Object obj = new Object() {
  21.                                 public void fun() {
  22.                                 System.out.println("aa");
  23.                         }//
  24.                 };
  25.                 (obj.getClass().getMethod("fun")).invoke(obj);
  26.                 //obj.fun();   //  这里为什么编译错误
  27.                   
  28.         }
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
tiuwing 发表于 2014-6-8 22:36
之所以a.show()编译通过,而obj.fun()编译没通过,是因为你把obj定义为Object类了,而Object类中是找不到fu ...

是不是Object 类中的,方法不能被重写
回复 使用道具 举报
本帖最后由 西门吹风 于 2014-6-8 23:10 编辑

用父类引用创建子类对象时,父类引用只能访问子类中覆盖父类的方法,不能访问子类特有的方法,而Object类中应该是没有fun方法的,所以用Object类引用创建的子类对象父类引用是不能访其特有方法fun()的,多态的特点。
回复 使用道具 举报
收获很多.谢谢各位大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马