第六章 内部类

来源:互联网 发布:ad10电路设计软件 编辑:程序博客网 时间:2024/06/05 18:39

内部类就是在一个类的内部在创建一个类。内部类的好处
1. 内部类的对象能够访问它的对象的所有方法和属性,包括私有数据。
2. 匿名内部类可以很方便的定义回调。
3. 内部类可以很方便的编写事件驱动的程序。

7.1 使用内部创建对象

public class school{    public void setStudentCourse(String [] courses){        new Course(courses)    }    private class Course{        private Stringp[] course;        public course(String [] course ){            this.course =course;            getInfo();        }        void getInfo(){        }    }}

7.2 局部内部类

局部内部类就是在某个类的方法中定义一个内部类,作用范围在这个方法体内,与局部变量一样,不加修饰符。
1. 局部访问变量必须加final修饰,因为局部变量使用完毕就消失,而堆内存的数据并不会立即消失。
所以,堆内存还是用该变量,而改变量已经没有了。
为了让该值还存在,就加final修饰。
通过反编译工具我们看到了,加入final后,堆内存直接存储的是值,而不是变量名。

public class school{    public void setStudentCourse(String [] courses){     final class Course{        private Stringp[] course;        public course(String [] course ){            this.course =course;            getInfo();        }        void getInfo(){        }        new Course(courses)    }    }}

7.3 静态内部类

当一个内部类不需要引用他的外部类的方法、属性值时,可以将类设置为static,这就算是静态内部类。单例的时候可以考虑使用静态内部类。

7.4 匿名内部类

匿名内部类是一种特殊的局部内部类,用来继承一个类或者实现一个接口。

interface Person {   public abstract void study();  }  class PersonDemo {   public void method(Person p) {    p.study();   }  }  class PersonTest {   public static void main(String[] args) {    PersonDemo pd = new PersonDemo();    pd.method(new Person() {     public void study() {      System.out.println("好好学习,天天向上");     }    });   }  }  //看下面  interface Inter {   void show();  }  class Outer {   //补齐代码   public static Inter method() {    return new Inter() {     public void show() {      System.out.println("HelloWorld");     }    };   }  }  class OuterDemo {   public static void main(String[] args) {    Outer.method().show(); //"HelloWorld"   }  }
原创粉丝点击