Java 之 -------------- 内部类 详解

来源:互联网 发布:奖励旅游 知乎 编辑:程序博客网 时间:2024/04/29 10:40

java中的内部类,分为 内部类,局部内部类,匿名内部类!


内部类: 顾名思义 定义在类的内部的类叫做 内部类!

局部内部类: 定义在局部函数中的 类,叫做 局部内部类!

匿名内部类:  没有名字的内部类! 玩 android  都知道,android  比较常见 匿名内部类!


内部类的优点:

1 内部类可以直接 访问 外部类的所有成员!

因为,当你调用外部类的时候,却生了 outer.this.成员变量或函数!

2 含有静态成员的内部类, 必须是静态的!

3 内部类一般用在设计中!


弊端:

1 内部类 不能直接创建,  需要在前面 添加 外部类!

     2  外部类 访问 内部类
      先创建内部类 对象, 在访问!

代码如下:
package stu.love.d;class Outer{int num = 6;//内部类class Inner{public void show(){System.out.println("Hello World!"+num);}}public void func(){Inner in = new Inner();in.show();}}public class Innerdemo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubOuter out = new Outer();out.func();//直接创建内部类对象//内部类的类型   外部类.内部类  Outer.Inner  in = new Outer().new Inner();Outer.Inner  in1 = out.new Inner();}}

内部类定义为 静态的时候:
代码如下: 静态 直接用类名调用!
class Person{class Heart{}}class Outer{private  static int num = 6;static  class Inner{public static void show()//静态方法,其所在的内部类必须是静态的{System.out.println("Hello World!"+num);}}public void func(){Inner in = new Inner();in.show();}}class Demo16{public static void main(String[] args) {//调用静态内部类中的非静态方法Outer.Inner in = new Outer.Inner();in.show();//调用静态内部类中的静态方法Outer.Inner.show();}}


局部内部类:

实际意义 不是很大哦!
因为,她定义在 函数中,生命周期比较短。
注意的是: 她 所调用的变量 奥,因为 出栈后 可能 就消失了!
代码:
局部内部类:如果访问其所在函数的局部变量,该局部变量必须是final的class Outer {   int num = 3;Object obj;public void func(final int x){   final int y = 6;    <span style="white-space:pre"></span>//  局部内部类:class Inner //extends Object{public void show(){System.out.println(y);}public String toString(){return "inner"+y;}}       <span style="white-space:pre"></span>// 用的话 在 函数内使用!obj = new Inner();}
public void  function(){obj.toString();}}class Demo18 {public static void main(String[] args) {Outer out = new Outer();out.func(4);out.function();}}


内存解析图:



0 0