灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2387回复:0

[系统教程]JAVA新手入门(9)

楼主#
更多 发布于:2012-09-08 08:08

public class E
{  public static void main(String args[])
{  KindHello kindHello=new KindHello();
      kindHello.lookHello(new Chinese());//可以把它分解为SpeakHello hello; 和hello=new Chinese();
      kindHello.lookHello(new English());
   }
}[/code]
总结:花了一个篇幅将接口,就证明它的重要性,灵活使用接口对以后编写java程序再性能上会有质的提高的.
第八节课一些比较重要的类1.内部类类可以有两种重要的成员:成员变量和方法,类还可以有一种成员:内部类.
java支持在一个类中声明另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外部类.声明内部类如同在类中声明方法和成员变量一样,一个类把内部类看作是自己的成员.内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法.内部类的类体中不可以声明类变量和方法.外嵌类的类体中可以用内部类声明对象,作为外嵌类的成员.举例体会:

复制代码
class China
{   final String nationalAnthem="义勇军进行曲";
    Beijing beijing; //Beijing 是个内部类,其声明了一个对象作为外嵌类的成员                
    China()
    {  beijing=new Beijing();
    }
    String getSong()
    {  return nationalAnthem;
    }
   class Beijing     //内部类的声明      
    {   String ;
        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)//类体
              {   return n*n*n;
              }
           }
         );
     Sqrt ss=new Sqrt()   //使用匿名类创建对象,ss是该对象的上转型对象            
            { public double getSqrt(int x) //匿名类是abstract类Sqrt的一个子类,所以必须实现getSqrt()方法
               {  return Math.sqrt(x);    
               }
            };
     double m=ss.getSqrt(5);   //上转型对象调用子类重写的方法
     System.out.println(m);
   }
}



喜欢0 评分0
游客

返回顶部