内部类
成员内部类
public class Outer {
private int id;
public void out(){}
public class Inner{
//内部类
//可以直接使用id(外部类私有属性), out()
}
}
内部类的使用(使用上面的类定义)
Outer outer = new Outer();
//可以通过外部类实例化内部类
Outer.Inner inner = outer.new Inner();
静态内部类
public class Outer {
private int id;
public static class Inner{
//静态内部类
//此时无法获取id
}
}
在这种定义方式下无法获取变量id,因为static在编译时已经出现,但id在编译时没有出现(除非加上static)
同一文件下的内部类
//同一文件下
public class Outer{
}
class A{}
注意:一个java文件里面只有一个public,但可以有多个class文件
局部内部类
public class Outer {
//局部内部类,和局部变量一样
public void method(){
class Inner{
//里面可以写自己的方法
public void in(){}
}
}
}
匿名内部类
- class
public class Test {
public static void main(String[] args){
new Apple.eat();//匿名内部类
}
}
class Apple{
public void eat(){}
}
- interface
public class Test {
public static void main(String[] args){
new UserService(){};//匿名内部类
}
}
interface UserService{
}
如果interface里面有方法,在使用匿名内部类是同样需要重写,如下:
public class Test {
public static void main(String[] args){
//默认返回UserService类型的对象
new UserService(){
@Override
public void hello(){}
};
}
}
interface UserService{
void hello();
}