| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 640 人关注过本帖
标题:java 内部类求解
只看楼主 加入收藏
wye213
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2012-3-8
结帖率:75%
收藏
 问题点数:0 回复次数:4 
java 内部类求解
谁能给我解释一下下面这个程序中红色部分内容,抽象类不是不能被实例化吗?是否会与匿名类有关呢?谢谢各位啦。

abstract class Base {
  public Base(int i) {
    System.out.print("Base constructor, i = " + i);
  }
  public abstract void f();
}   

public class AnonymousConstructor {
  public static Base getBase(int i) {
    return new Base(i) {
      { System.out.print("Inside instance initializer"); }
      public void f() {
        System.out.print("In anonymous f()");
      }
    };
  }
  public static void main(String[] args) {
      Base base = getBase(47);
      base.f();
  }
}
  output:
Base constructor, i = 47Inside instance initializerIn anonymous f()


搜索更多相关主题的帖子: void public abstract return 
2012-04-27 21:25
wye213
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2012-3-8
收藏
得分:0 
没有人知道吗
2012-05-08 09:17
爱编程的艾
Rank: 2
等 级:论坛游民
帖 子:19
专家分:38
注 册:2011-4-16
收藏
得分:0 
里面的那个内部类重写了抽象类的抽象方法public abstract void f();
,所以他不是抽象类了啊、、、、必然可以实例化了、、、、
2012-05-11 23:23
ab1034982749
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:215
专家分:1185
注 册:2012-4-14
收藏
得分:0 
Base base ;
这样只是定义了一个用于存放Base类型引用的变量,
而并没有进行实例化
2012-05-12 17:05
春馨梦
Rank: 2
等 级:论坛游民
帖 子:7
专家分:22
注 册:2012-5-10
收藏
得分:0 
getBasse() 是本类AnonymousConstructor 的一个方法。
abstract class Base {//抽象类
    public Base(int i) {//抽象类的构造
        System.out.println("Base constructor, i = " + i);
    }
    public abstract void f();//抽象方法
}

public class AnonymousConstructor {//测试类
    public static Base getBase(int i) {//它是AnonymousConstructor 的一个方法,就你问的问题。
    return new Base(i) {//匿名内部类,就是实例化Base
                                      //(匿名内部类可以直接将一个接口或抽象类实例化)
        {//非静态语句块,在new的时执行
              System.out.println("Inside instance initializer");
              }
             public void f() {//重写抽象类Base的抽象方法。实现类必须重写父类中抽象方法。
             System.out.println("In anonymous f()");
             }
       };//至此匿名内部类实例化完成。并返回。
}
public static void main(String[] args) {{//它是AnonymousConstructor 的mian方法,main中只能调静态方法
Base base = getBase(47);\\在这就是在调
base.f();
}
}//测试类完

高手不是自己有多厉害,而是在自己厉害的情况下,完全教出个厉害的徒弟来……
2012-05-17 22:57
快速回复:java 内部类求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031651 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved