内部类

在一个类中定义另一个类,我们把这个类称为  寄生类  和  内部类  或  类属类

内部类 可以访问 外部类 的私有属性

例:
public class Outer1 {
  private int size;
  /* 定义一个内部类,名为 "Inner" */
  public class Inner {
    public void doStuff() {
      // 内部类可以访问外部类的私有属性
      size++;
    }
  }
  public void testTheInner() {
    Inner i = new Inner();
    i.doStuff();
  }
}

实例化内部类格式:

v 实例化内部类的两种方法:

---法一:

Outer.Inner in=new Outer().new Inner();

---法二:

Outer o=new Outer();

Outer.Inner I=o.new Inner();

如果内部类是static的,也可以用下面方法:

Outer.Inner in=new Outer.Inner();

内部类特性

v Inner class可以声明为抽象类 ,因此可以被其它的内部类继承。也可以声明为final的。

public abstract class Inner {。。。。。}

public final class Inner {。。。。。}

 

v 和外层类不同,Inner class可以声明为private或protected;

private class Inner {。。。。。}

protected class Inner {。。。。。}

class Inner {。。。。。}

 

v Inner class 可以声明为static的,但此时就不能再使用外层封装类的非static的成员变量(除非将变量也声明成static);

public static class Inner {。。。。。}

 

v 非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员

匿名内部类public interface Person {接口
    public void init();//抽象方法
    public void getName();
}
public class PersonTest {实现接口类
    public static void main(String[] args) {    
//Person p=new Person();//接口不能实例化
        //匿名内部类 PersonTest$1  bin文件夹下
        //匿名内部类 :在一个类中定义一个内部类
        Person p=new Person(){//new一个匿名内部类  赋值给对象p
            public void init(){
                System.out.println("初始化方法");
            }
            public void getName() {
                System.out.println("姓名:Tom");    
            }
        };
        p.init();
        p.getName();    
    }
}

 

posted @ 2014-12-12 23:56  屌丝一枚#  阅读(89)  评论(0)    收藏  举报