一、内部类
·内部类可以定义在另一个类、方法或者表达式里面。
·内部类一共分为4种:
1. 静态内部类(Static inner class):只能访问外部类的静态成员变量与静态方法。
生成静态内部类对象的方式为:outerClass.InnerClass inner = new OuterClass.InnerClass();
2. 成员内部类(member inner class): 可以访问外部类的静态与非静态的方法与成员变量。
生成成员内部类对象的方法为:OutClass.InnerClass inner = new OuterClass().new InnerClass();
若想在局部内部类中访问外部类的成员变量,语法为:OuterClass.this.a;
3. 局部内部类(Local Inner Class): 定义在方法当中只能访问方法中声明的 final 类型的变量。
4. 匿名内部类(Anonymous Inner Class): 匿名内部类会隐式的继承一个父类或实现一个接口。
package com.bob.innerclass;
import java.util.Date;
//匿名内部类
public class AnonymousInnerClassTest {
@SuppressWarnings("deprecation")
public String get(Date date){
return date.toLocaleString();
}
public static void main(String[] args) {
AnonymousInnerClassTest test = new AnonymousInnerClassTest();
// String str = test.get(new Date());
// System.out.println(str);
// new Date(){ }这种写法的含义:
// 1. 表示定义了一个匿名内部类
// 2. 这个匿名内部类继承了Date这个类
// 3. 它继承后没有重写Date的任何方法
// 4. 当new Date(){}生成的对象并不是Date类的对象而是Date类的子类的对象。
// 传递过去的并不是Date对象的实例,而是继承了Date类的子类的对象传给了Date
String str = test.get(new Date()
{
@Override
public String toLocaleString() {
return "hello world";
}
});
System.out.println(str);
}
}