您的位置:首页 > 编程语言 > Java开发

Java里面的四大内部类

2017-04-08 20:41 267 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  继承 string