Java里面的四大内部类

来源:互联网 发布:ubuntu kylin qq 编辑:程序博客网 时间:2024/05/22 13:38

Java里面有种类叫做内部类。在Java里面有四种内部类分别是匿名内部类,静态内部类,成员内部类,局部内部类。今天就来说说这几个内部类。

(1)匿名内部类:说白了就是把接口的实现写在方法的调用里面,而这个匿名的类就是接口的实现,而不是单独写出来。

这段代码,是把接口的实现单独写出来,没有用到匿名内部类:

public class Test {//静态方法public static void test(CustomerServcie cs){cs.logout();}//入口public static void main(String[] args) {test(new CustomerServiceImpl());}}//接口interface CustomerServcie{void logout();}//编写一个类去继承去实现这个接口class CustomerServiceImpl implements CustomerServcie{public void logout(){System.out.println("系统已经安全退出了!!!");}}
这段代码是使用了匿名内部类的:

public class Test02 {//静态方法public static void test(CustomerServcies cs){cs.logout();}//入口public static void main(String[] args) {//test(new CustomerServicesImpl());//使用匿名内部类的方式执行test方法//整个这个”new CustomerServcies(){}“就是一匿名个内部类test(new CustomerServcies() {public void logout() {System.out.println("系统已经安全退出了!!!");}});}}//接口interface CustomerServcies{void logout();}
匿名内部类的优缺点:

优点:少定义一个类

缺点:缺点:不能重复使用

(2)成员内部类:成员内部类可以等同的看作成员变量

代码如下:

public class OutClass {//静态变量private static String s1 = "A";//成员变量private String s2 = "B";//静态方法private static void m1(){System.out.println("static'm1 method execute");}//成员方法private void m2(){System.out.println("m2 method execute");}//静态内部类//可以用访问权限的修饰符来修饰static class InnerClass{//定义静态方法public static void m3(){System.out.println(s1);m1();//System.out.println(s2);//m2();不允许的}public void m4(){System.out.println(s1);m1();//System.out.println(s2);//m2();}}public static void main(String[] args) {OutClass.InnerClass.m3();//想让m4执行InnerClass inner = new OutClass.InnerClass();inner.m4();}}
成员内部类的作用:可以访问外部类中私有的数据。

(3)静态内部类:<1>.成员内部类可以等同的看做成员变量。<2>.成员内部类中不能有静态方法。<3>成员可以访问外部类中所有的数据

代码如下:

public class OuterClass {//静态变量private static String s1 = "A";//成员变量private String s2 = "B";//静态方法private static void m1(){System.out.println("static'm1 method execute");}//成员方法private void m2(){System.out.println("m2 method execute");}//成员内部类//可以用访问权限的修饰符来修饰class InnerClass{//成员内部类中不能定义静态方法//public static void m3(){//System.out.println(s1);//m1();//////System.out.println(s2);////m2();不允许的//}public void m4(){System.out.println(s1);m1();System.out.println(s2);m2();}}public static void main(String[] args) {//创建外部类的对象OuterClass out = new OuterClass();InnerClass inner = out.new InnerClass();inner.m4();//可以跑}}
静态内部类可以直接访问外部类的静态数据,无法直接访问成员。

局部内部类:<1>局部内部类等同于局部变量。<2>局部内部类在访问局部变量的时候,局部变量必须使用final修饰

public class OuterClass {public void m1(){//局部变量final int i = 10; //局部内部类//局部内部类不能用访问控制权限修饰符修饰//该类只在m1()方法里面有效class InnerClass{//内部类中不能有静态声明//public static void m(){////}//成员方法public void m2(){System.out.println(i);}}//调用m2()方法InnerClass inner = new InnerClass();inner.m2();}//入口public static void main(String[] args) {OuterClass out = new OuterClass();out.m1();}}



1 0
原创粉丝点击