keep moving!

We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
随笔 - 37, 文章 - 2, 评论 - 3, 引用 - 0
数据加载中……

java内部类2

1.定义:在一个类中定义另外一个类,这个类就叫做内部类或内置类 (inner class)
2几个特性
1.可以访问其外部类用private修饰的变量或是方法
    例子:

    class Outer
   {
     private String str="kingtoon";
      class Inner
      {
        void printInner()
       {
         System.out.println(str);
       }
      }
    Inner getInner()
    {
       return new Inner();
    }
}
class InnerClassTest
{
public static void main(String []args)
{
   Outer outer=new Outer();
   Outer.Inner inner=outer.getInner();
   inner.printInner();
}
}
2.this关键字
    “当我们建立一个inner class时,其对象就拥有了与外部类对象之间的一种关系,这是通过一个特殊的this reference形成的,使得内部类对象可以随意的访问外部类中所有的成员”(包括private变量和方法)。

例子:

class Outer
{
private String str="kingtoon";
class Inner
{
   String str="hjd";
   void printInner()
   {
    String str="kingtoon_hjd";
   System.out.println(str);
    System.out.println(this.str);
    System.out.println(Outer.this.str);
   }
}

Inner getInner()
{
   return new Inner();
}
}
class InnerClassTest
{
public static void main(String []args)
{
   Outer outer=new Outer();
   Outer.Inner inner=outer.getInner();
   inner.printInner();
}
}
   3.外部类访问内部类成员变量或其函数的两种方法
      第一种:

     class Outer
    {
      private String str="kingtoon";
      class Inner
     {
        void printInner()
        {
          System.out.println(str);
       }
   }
}
class InnerClassTest
{
public static void main(String []args)
{
   Outer outer=new Outer();
  Outer.Inner inner= outer.new Inner();
   inner.printInner();
}
}

    第二种

class Outer
{
private String str="kingtoon";
class Inner
{
   void printInner()
   {
    System.out.println(str);
   }
}

Inner getInner()
{
   return new Inner();
}
}
class InnerClassTest
{
public static void main(String []args)
{
   Outer outer=new Outer();
  Outer.Inner inner=outer.getInner();
   inner.printInner();
}
}

4.在外部类的某方法内部定义内部类,内部类的某方法里只能访问外部类方法里由final声明的变量或参数。例子:

class Outer
{

     void printOuter(final int n)
     {
     final String str="kingtoon";
      class Inner
      {
       void printInner()
       {
        System.out.println(str);
        System.out.println(n);
       }
      }
     }
}

5.其实,使用内部类,主要和接口同时使用,可以让java实现多继承。

例如:

interface A
{
void printA();
}
class B
{
void printB()
{
   System.out.println("b");
}
}
class C extends B
{
A getA()
{
   return new A()
   {
    public void printA()
    {
     System.out.println("a");
    }
   };
}
}
class Interface_extends_inner
{
static void fn1(A a)
{
     System.out.println("A");
}
static void fn2(B b)
{
   System.out.println("B");
}
public static void main(String []args)
{
  
   C c=new C();
   A a=c.getA();
   a.printA();
   c.printB();
   fn1(a);//fn1(c.getA());  

   fn2(new B());
}
}

6.内部类可以解决方法同名的情况

例如:

interface Machine
{
void run();
}
class Person
{
void run()
{
   System.out.println("现在,我可以跑了");
}
}
class Robot extends Person
{
private class MachineHeart implements Machine
{
   public void run()
   {
    System.out.println("机器引擎启动了");
   }
}
MachineHeart getMachinHeart()
{
   return new MachineHeart();
}
}
class Fangfatongming_inner
{
public static void main(String [] args)
{
   Robot robot=new Robot();
   Machine machine=robot.getMachinHeart();
   machine.run();
   robot.run();
}
}
     此外,内部类可以声明为private或protected;还可以声明为abstract或final(类似于方法的访问权限)。
     还有,内部类可以声明为static的,但此时就不能再使用外部类的非static的成员变量和非static的成员方法;非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员.

一点说明:参考资料《java无难事》Author孙鑫

posted on 2008-09-07 11:42 大石头 阅读(196) 评论(0)  编辑  收藏 所属分类: 基础


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


网站导航: