unicorn的java课堂笔记(8)上

作者在 2006-12-17 21:34:00 发布以下内容

第八节课

一些比较重要的类

1.内部类

类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类.
java支持在一个类中声明另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外部类.声明内部类如同在类中声明方法

和成员变量一样,一个类把内部类看作是自己的成员.内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用

外嵌类中的方法.内部类的类体中不可以声明类变量和方法.外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员.举例体会:

程序代码:


class China
{   final String nationalAnthem="义勇军进行曲";
    Beijing beijing; //Beijing 是个内部类,其声明了一个对象作为外嵌类的成员                
    China()
    {  beijing=new Beijing();
    }
    String getSong()
    {  return nationalAnthem;
    }
   class Beijing     //内部类的声明      
    {   String name="北京";
        void speak()
        {  System.out.println("我们是"+name+" 我们的国歌是:"+getSong());
        }
    }
}
public class E
{ public static void main(String args[])
{  China china=new China();
      china.beijing.speak();
   }  
}  

2.匿名类

a) 和类有关的匿名类
当使用类创建对象时,程序允许把类体与对象的创建组合在一起,也就是说,类创建对象时,除了构造方法还有类体,此类体被认为是

该类的一个子类去掉类声明后的类体,称作匿名类.匿名类就是一个子类,由于无名可用,所以不可能用匿名类声明对象,但却可以直

接用匿名类创建对象.假设People是类,那么下列代码就是用People的一个子类(匿名类)创建对象:
new People()
{
匿名类的类体
}

因此,匿名类可以继承父类的方法也可以重写父类的方法.使用匿名类时,必然是在某个类中直接用匿名类创建对象,因此匿名类一定

是内部类,匿名类可以访问外嵌类中的成员变量和方法,匿名类的类体中不可以声明static成员变量和static方法.

尽管匿名类创建的对象没有经历类声明的步骤,但匿名对象的引用必须传递一个匹配的参数,匿名类的主要途径就是向方法的参数传

值.

假设f(B x)是一个方法
void f(B x){
x调用B类中的方法
}

其中参数是B类的对象,那么在调用方法f时可以向其参数x传递一个匿名对象,例如:
f(new B()
{匿名类的类体}
)

如果匿名类继承了类的方法,x就调用继承的方法,如果匿名类重写了父类的方法,x就调用重写的方法.
看看下面的例子,用匿名类创建一个对象,并向一个方法的参数传递一个匿名类的对象.

程序代码:


class Cubic
{  double getCubic(int n)
    { return 0;
    }
}
abstract class Sqrt
{  public abstract double getSqrt(int x);
}
class A
{   void f(Cubic cubic)
    {  double result=cubic.getCubic(3);//执行匿名类体中重写的getCubic()
       System.out.println(result);
    }
}
public class E
{  public static void main(String args[])
   {  A a=new A();
      a.f(new Cubic()  //使用匿名类创建对象,将该对象传递给方法f的参数cubic      
           {  double getCubic(int n)//类体
             
转帖&&连载 | 阅读 1132 次
文章评论,共0条
游客请输入验证码