静态内部类(可以用访问控制权限的修饰符修饰)
可以等同看做静态变量
可以访问外部类中私有的数据(作用)
静态内部类可以直接访问外部类的静态数据,无法直接访问成员
public class Demo18 {
private static String a = "aqs";
private String b = "111";
private static void m1() {
System.out.println("静态方法执行");
}
private void m2() {
System.out.println("成员方法执行");
}
static class innerclass{//静态内部类
public static void m3() {
System.out.println(a);
//System.out.println(b);不可以访问
m1();
//m2();
}
public void m4() {
System.out.println(a);
//System.out.println(b);不可以访问
m1();
//m2();
}
}
public static void main(String[] args) {
Demo18.innerclass.m3();//外部类.内部类.方法
innerclass inner = new Demo18.innerclass();//执行m4()
inner.m4();
}
}
成员内部类
可以等同看做成员变量
成员内部类中不能有静态声明
成员内部类可以访问外部类所有的数据
public class Demo18 {
private static String a = "aqs";
private String b = "111";
private static void m1() {
System.out.println("静态方法执行");
}
private void m2() {
System.out.println("成员方法执行");
}
class innerclass{//成员内部类
public void m3() {
System.out.println(a);
System.out.println(b);
m1();
m2();
}
public void m4() {
System.out.println(a);
System.out.println(b);
m1();
m2();
}
}
public static void main(String[] args) {
Demo18 dc = new Demo18();//创建外部类对象
innerclass inner = dc.new innerclass();
inner.m4();
}
}
局部内部类等同于局部变量
不能用访问控制权限符修饰(只在方法里有效)
不能有静态声明
在局部内部类中访问局部变量的时候必须final修饰局部变量
public class Demo19 {
public void m1() {
final int i = 10;
class innerclass{//局部内部类
public void m2() {//成员方法
System.out.println(i);
}
}
//调用
innerclass inner = new innerclass();
inner.m2();
}
public static void main(String[] args) {
Demo19 dc = new Demo19();
dc.m1();
}
}
匿名内部类
指的是类没有名字
优点,少定义一个类
缺点,不能重复利用
public class Demo20 {
public static void test (CustomerService cs) {
cs.logout();
}
public static void main(String[] args) {
//调用test方法
//test(new CustomerServiceIMPL());
//使用匿名内部类
test(new CustomerService(){
@Override
public void logout() {//实现接口中的方法
// TODO Auto-generated method stub
System.out.println("退出系统");
}});
}
}
interface CustomerService{
//接口
void logout();
}
/*class CustomerServiceIMPL implements CustomerService{
public void logout() {
System.out.println("系统已经退出");
}
}*///有了匿名内部类不再需要写这个了