内部类
在一个类中定义另一个类,我们把这个类称为 寄生类 和 内部类 或 类属类
内部类 可以访问 外部类 的私有属性
例: 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(); } }

浙公网安备 33010602011771号