内部类就是在一个类的内部在创建一个类。内部类的好处
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"
}
}