JAVA 内部类的作用总结

    技术2025-10-25  7

    1、通过查阅http://flowercat.javaeye.com/blog/33371 的内部类blog,匿名类之前的片段,总结内部类的作用

     

    一、隐藏你不想让别人知道的操作,也即封装性。可以在public 类里直接对内部类的创建

     

    二、非静态内部类对象有着指向其外部类对象的引用

          意思是非静态内部类直接可以访问内部类的对象、方法、变量

     

    2、匿名内部类

    简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:    ·只用到类的一个实例。     ·类在定义后马上用到。     ·类非常小(SUN推荐是在4行代码以下)     ·给类命名并不会导致你的代码更容易被理解。    在使用匿名内部类时,要记住以下几个原则:    ·匿名内部类不能有构造方法。     ·匿名内部类不能定义任何静态成员、方法和类。     ·匿名内部类不能是public,protected,private,static。     ·只能创建匿名内部类的一个实例。        ·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。     ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。  

    一、内部类的父类构造方法不需要传参

    1、父接口

    public interface InterfaceClass { public int getValue();}

     

    2、子类实现

     

    public class AnonimityClass { private int value = 1; public InterfaceClass getInterface(){  return new InterfaceClass(){   private int i = 2;   public int getValue(){    return i*value;   }  }; }  public static void main(String[] arg){  AnonimityClass anonimity = new AnonimityClass();  InterfaceClass interfaceClass = anonimity.getInterface();  System.out.println(interfaceClass.getValue()); }}

     

    上边的匿名片段就等于

    class MyInterfaceClass implements InterfaceClass{

      private int i = 2;   public int getValue(){    return i*value;   } return new MyInterface();

     

    }

     

    二、匿名子类的父类构造方法带参数的例子

    1、父类

    public class SuperClass { public SuperClass(int x){   }  public void pint(int i){  System.out.println("superclass" + i); }}

     

    2、内部类

    public class AnonimitySubClass{  public SuperClass getSuperClass(int x){  return new SuperClass(x){   public void pint(int i){    System.out.print("subClass "+i);   }  }; }   public static void main(String[] arg){  AnonimitySubClass anonimitySubClass = new AnonimitySubClass();  SuperClass sup = anonimitySubClass.getSuperClass(1);  sup.pint(10); }}

    父类的构造方法有参数int x ,内部匿名类可以在外部类的方法中传参进去并在new SuperClass(x)

     传进。

     

     注意:如果匿名内部类用到外部方法传进的参数。外部方法参数就要加final ,如不加编译会暴错

    1、父类

    public class SuperClass { public SuperClass(int x){   }  public void pint(int i){  System.out.println("superclass" + i); }}

     

    2、实现内部类

    public class AnonimitySubClass{  public SuperClass getSuperClass(final int x){  return new SuperClass(x){   public void pint(int i){    System.out.print("subClass "+x);   }  }; }   public static void main(String[] arg){  AnonimitySubClass anonimitySubClass = new AnonimitySubClass();  SuperClass sup = anonimitySubClass.getSuperClass(1);  sup.pint(10); }}

    最新回复(0)