Every Day's Gain

Larry.Zhao's Coding Diary
随笔 - 23, 文章 - 1, 评论 - 2, 引用 - 0
数据加载中……

《Java核心技术卷一》读记

标记接口:普 通的接口的通常目的是保证类实现了某个或某组方法。而标记接口没有方法,像Cloneable            接口是Java提供的几个标记接口之一。使用标记接口的唯一目的是使得可以用instanceof进行          类型查询:
             if(Obj instanceof Cloneable) ...

内部类:  分为:内部类、局部内部类、匿名内部类、静态内部类几种。
         
          内部类:定 义在类的内部,可以用public、private访问指示符来修饰声明。如果是private
                  别的话则属于外部类的私有内部类,只有这个外部类的方法才能生成内 部类的对象。
                  所以我们说只有内部类才是私有的,普通类总是具有包可见性或公有可见性。

                  内部类的方法可以访问它所在的外部类的实例字段,这是通过编译器添加的隐性的
                  字段来实现的。
                  eg:
                     class BankAccount{
                         public BankAccount (double initBalance){
                            balance = initBalance;
                         }
                         private double balance;
                        
                         public void start(double rate){
                            ActionListener adder = new InterestAdder(rate);
                            Timer t = new Timer(1000, adder);
                            t.start();
                         }

                         private class InterestAdder
                                       implements ActionListener{
                            public InterestAdder (double aRate){
                               rate = aRate;
                            }
                            public void actionPerformed(ActionEvent event){
                               double interest = balance * rate / 100;
                               balance += interest;
                              
                               NumberFormat formatter
                                        = NumberFormat.getCurrencyInstance();
                               System.out.println("balance=" + formatter.format(balance));                                }
                           
                            private double rate;
                         }
                      }
                在 内部类的方法中,有一个隐含的外部类引用,例如内部类中的actionPerformed的方
                法中可以的显示的表示为:

                      double interest = BankAccount.this.balance * this.rate /100;
                内部对象的构造器即可显示的表示为:
                      Outerobject.new InnerClass(Construction paramters);
                即:
                      ActionListener adder = this.new InterestAdder(rate);

       局部内部类定义在方法内部的类,不用访问指示符来修饰。当只要在一个范围内使用该类的情
                   况下使用局部内部类。其好处在于对外界完全隐藏,仅有定义该类的方法能够使用
                   该类。可以访问外部类的实例字段,还可以访问该方法的局部变量。不过需要被访
                   问的局部变量必须被声明为final的。

       匿名内部类匿名内部类即局部内部类,不过我们仅仅需要一个类的对象,所以在定义的时候,
                   连类的名字都不必指定。
                   eg:
                      public void start(final double rate){
                          ActionListener adder = new ActionListener(){
                                public void actionPerformed(ActionEvent event){
                                    double interest = balance * rate / 100;
                                    balance += interest;
                                   
                                    NumberFormat formatter
                                        = NumberFormat.getCurrencyInstance();
                                    System.out.println("balance="+formatter.format(balance);
                                }
                          }
                       }
                   其中用于构造对象的任意参数都要放在超类型名字后的括号后,即:
                      new superclass(construction parameter)
                   这 里的超类型可以是接口,那么内部类实现这个接口;也可以是类,那么内部类扩
                   展这个类。


                   内部类没有构造器,如果内部类是扩展外部类,那么构造参数将被送到超类的构造
                   器中;如果内部类是用来实现接口,则没有任何构造参数,不过必须保留括号。
      
       静态内部类:静 态内部类用于只为了隐藏某个类在另一类内部,而不需要内部类对外部类对象的
                   引用。这是可以把内部类生命为static的来去掉编译器添加的引用。除了没有对外
                   部类对象的引用,静态内部类同其他内部类都一样。而如果某个内部类对象是在静
                   态方法中构造的话,这个内部类也必须声明成静态内部类。
      
       内部类总结:1、内部类对象能够访问创建它的对象的实现--包括那些私有数据。
                   2、内部类能够隐藏起来,不为同一包中的其他类所见。
                   3、匿名内部类可以方便地定义运行时回调。
                   4、使用内部类在编写事件驱动的程序使用起来很方便。

代理:(这个等等再看,看了再记。)

posted on 2005-08-07 16:13 Larry.Zhao's Coding Diary 阅读(739) 评论(0)  编辑 收藏 引用 所属分类: Java

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