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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范晓冲 中级黑马   /  2014-1-10 15:53  /  1620 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 匿名内部类:
  3. 1、理解:匿名内部类就是内部类的一种简化形式。
  4. 2、前提:匿名内部类得继承一个类,或者实现一个接口。

  5. */
  6. abstract class Hart{
  7.                 public abstract void show();       
  8. }
  9. class Body{
  10.                 int x=8888;
  11.                 /*
  12.                 class InnerHart extends Hart{
  13.                                 public void show(){
  14.                                                 System.out.println("x=="+x);       
  15.                                 }
  16.                 }       
  17.                 public void function(){
  18.                                 new InnerHart().show();       
  19.                 }
  20.                 */
  21.                 //如下代码是上面注释部分的等价代码,可以用匿名内部类代替,但是编译出错,老毕就是这么写的啊!
  22.                 //难道我写的匿名内部类格式有问题?还是局部细节有待改正?请指点,不胜感激。
  23.                 //匿名内部类好难理解啊
  24.                 new Hart(){
  25.                                 public void show(){
  26.                                                 System.out.println("x=="+x);       
  27.                                 }       
  28.                 }.show();
  29. }
  30. public class NiMingInnerClass090402{
  31.                 public static void main(String[] args){
  32.                                
  33.                 }       
  34. }
复制代码

编译结果:


NiMingInnerClass.png (85.21 KB, 下载次数: 52)

NiMingInnerClass.png

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 加油,赶紧在,面试了!

查看全部评分

5 个回复

倒序浏览
你这个好像是匿名对象不是匿名内部类 你的匿名内部类在哪里? 类是class修饰的
回复 使用道具 举报
你搞个匿名内部类继承抽象类 然后写这个匿名对象 就OK了
回复 使用道具 举报
LZ的代码我看了半天,实在没看出问题,于是,我把你写的注释什么的,多余的都删掉,结构清晰了!LZ写的是匿名内部类,但写到类里面了。我们知道,类里面可以写两种东西,一个属性,一个方法
很显然,匿名内部类不是方法,那是不是属性呢?由于匿名内部类返回一个对象,所以不是也不是属性(真没见过返回对象的属性呢{:soso_e120:})。
所以结论是:这玩意不是类的成员,却呆在类里面,所以编译器不同意通过嘛!
你写到函数里面就好了,比如下面这样:
  1.         public static void main(String[] args) {
  2.                 final int x = 888;
  3.                 new Hart() {
  4.                         public void show() {
  5.                                 System.out.println("x==" + x);
  6.                         }
  7.                 }.show();
  8.         }
复制代码








评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
1,代码块存放位置放错了,它是一个内部类对象掉用方法,不能独立存在一个类中,它不是类成员,类内部存放的是方法和成员变量,因此应将其放入Body类的 function方法内,而不能独立存在于Body类中。
2,代码修改
  1. abstract class Hart{
  2.                 public abstract void show();        
  3. }
  4. class Body{
  5.                 int x=8888;     
  6.                 public void function(){
  7.                                         new Hart(){
  8.                                                  public void show(){
  9.                                                         System.out.println("x=="+x);        
  10.                                                  }        
  11.                                         }.show();      
  12.                 }
  13. }
  14. public class InnerClassTest{
  15.                 public static void main(String[] args){
  16.                         Body body = new Body();
  17.                                                 body.function();
  18.                 }        
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢版主,我在努力,我要感动我自己,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马