一、定义
接口:接口用来描述具体的功能,但并不给出功能的具体实现
内部类:处于另一个类的内部,其中的方法可以访问外部类的域,内部类技术主要用来设计具有相互协作的类集合
二、接口(没有实例域的抽象类)(instanceof也可以用于接口)
–1》接口中的方法自动属于public,不必提供关键词
–2》接口中不能包含实例域和静态方法,却可以包含常量
**自动设置为public static final
–3》不能用new实例化接口,却能够声明接口的变量:
**如List list=new ArrayList();
–4》接口与抽象类:
类是单继承,接口是多继承
三、内部类
–1》**内部类可以访问该类所在作用域的数据,包括私有数据
**内部类可以对同一个包中的其他类隐藏起来
**当要定义一个回调函数又不想编写大量代码用匿名内部类
–2》局部内部类
**局部内部类定义在方法中,完全隐藏,只有方法知道内部类的存在
**局部内部类可以访问被声明为final的局部变量、
class LocalInner
{
int a = 1;
public void doSomething()
{
int b = 2;
final int c = 3;
// 定义一个局部内部类
class Inner3
{
public void test()
{
System.out.println("Hello World");
System.out.println(a);
// 不可以访问非final的局部变量
// error: Cannot refer to a non-final variable b inside an inner
// class defined in a different method
// System.out.println(b);
// 可以访问final变量
System.out.println(c);
}
}
// 创建局部内部类的实例并调用方法
new Inner3().test();
}
}
–3》静态内部类
**只可以访问外部类的静态成员和静态方法,包括了私有的静态成员和方法。
class StaticInner
{
private static int a = 4;
// 静态内部类
public static class Inner
{
public void test()
{
// 静态内部类可以访问外部类的静态成员
// 并且它只能访问静态的
System.out.println(a);
}
}
}
–4》匿名内部类
**匿名内部类隐式地继承了一个父类或者实现了一个接口
String str2 = test.getDate(new Date()
{
});// 使用了花括号,但是不填入内容,执行结果和上面的完全一致
// 生成了一个继承了Date类的子类的对象