JAVA 内部类的作用总结

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);
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值