posts - 16, comments - 6, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Java 内部类 匿名类

Posted on 2009-09-09 14:07 java-flying 阅读(309) 评论(0)  编辑  收藏

 

内部类

1非静态内部类:
    。隐形都有外部类对象的引用
    。不准有任何静态数据
    。通过new关键字创建内部类时 必须引用外部类对象 如:outClassObject.new InnerClass();
    。如果内部类和外部类的属性重名 对外部类的重名属性引用方式为:OutClass.this.属性名
2.静态内部类:
    。可以存在任何静态数据
    。可以通过直接new 来得到该对象
3.局部内部类
    。定义在一个方法甚至一个代码块之内
    例如:

public class Goods1 {
     
public Destination dest(String s) {
          
class GDestination implements Destination {
               private String label;
               private GDestination(String whereTo) {
                    label = whereTo;
               }

               public String readLabel() { return label; }
          }

          return new GDestination(s);
     }


     
public static void main(String[] args) {
          Goods1 g
= new Goods1();
          Destination d 
= g.dest("Beijing");
     }

}


4.匿名内部类 
    。两种实现:第一种,继承一个类,重写其方法;第二种,实现一个接口(可以是多个),实现其方法;
    。语法规则:new interfacename(){......}; 或 new superclassname(){......};

public class TestAnonymousInterClass{
    
public static void main(String args[]){
        TestAnonymousInterClass test
=new TestAnonymousInterClass();
        test.show();
    }

    
//在这个方法中构造了一个匿名内部类
    private void show(){
        Out anonyInter
=new Out(){// 获取匿名内部类实例
            
            
void show(){//重写父类的方法
                System.out.println("this is Anonymous InterClass showing.");
            }

        }
;
        anonyInter.show();
// 调用其方法
    }

}
 

// 这是一个已经存在的类,匿名内部类通过重写其方法,将会获得另外的实现
class Out{
    
void show(){
        System.out.println(
"this is Out showing.");
    }

}

    。不能extends其他类,匿名内部类实际也是接口或超类的子类
    。注意在使用 匿名内部类对象.getClass().getDeclaredMethods()  返回的是一个Method对象数组 不包括超类中的方法  (参见http://www.javaeye.com/topic/399120)


只有注册用户登录后才能发表评论。


网站导航: