成员内部类知识普通的内部类,它定义于另外一个类的内部,形式如下面所示:
public class Outer { private String username; public Outer(String username){ this.username=username; } //定义成员内部类 class Inner{ public void out(){ System.out.println("我是内部类的方法:"+username); } } public static void main(String[] args) { Outer outer=new Outer("moweng"); //成员内部类需要依赖于外部类而存在 Outer.Inner inner=outer.new Inner(); inner.out(); } }
我是内部类的方法:moweng
注:成员内部类可以无条件访问外部类的所有成员属性和成员方法,外部内如果需要访问内部类,需要创建一个成员内部类的实例对象:例子如下:
public class Outer { private String username; public Outer(String username){ this.username=username; //获取内部类 调用内部类的方法 getInner().out(); } class Inner{ public void out(){ System.out.println("我是内部类的方法:"+username); } } //返回一个内部类的实例对象 public Inner getInner(){ return new Inner(); } public static void main(String[] args) { Outer outer=new Outer("moweng"); } }
2.局部内部类
局部内部类是定义在一个方法或者作用域里面的类,它和成员内部类的区别为局部类的访问权限仅限于方法内或者改作用域内
public class Outer { private String username; public Outer(String username){ this.username=username; } //外部类的成员方法 public void method(){ //局部内部类 class Inner{ public Inner(){ System.out.println("我是一个方法内部类"); } } Inner inner=new Inner(); } public static void main(String[] args) { Outer outer=new Outer("moweng"); outer.method(); } }
3.静态内部类:
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类 似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外 部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。
public class Outer { private String username; public Outer(String username){ this.username=username; } static class Inner{ public Inner(){ System.out.println("我是一个静态内部类"); } } public static void main(String[] args) { //静态内部类的创建不依赖于外部类 Inner inner=new Inner(); } }
4.匿名内部类
public class Outer { public Outer(){ } public Object method(){ //匿名内部类 return new Object(){ public String toString(){ return "我是匿名内部类的方法"; } }; } public static void main(String[] args) { Object object=(new Outer()).method(); System.out.println(object.toString()); } }