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

java中的内部类

2015-06-12 13:21 344 查看
内部类的作用是:可以访问外部类中的私有数据
成员内部类:
成员内部类可以等同的看做是成员变量。

成员内部类不能有静态声明。

成员内部类可以访问外部类的所有的数据。

public class OuterClass{

//静态变量
private static String s1 = "A";

//成员变量
private String s2 = "B";

//静态方法
private static void m1(){
System.out.println("static's m1 method execute!");
}

//成员方法
private void m2(){
System.out.println("m2 method execute!");
}

//成员内部类
//可以用访问控制权限的修饰符修饰。
//public,protected,private,缺省
class InnerClass{

//静态方法
//public static void m3(){}

//成员方法
public void m4(){
System.out.println(s1);
m1();

System.out.println(s2);
m2();
}
}

//入口
public static void main(String[] args){

//创建外部类对象
OuterClass oc = new OuterClass();

InnerClass inner = oc.new InnerClass();//注意成员内部类的访问方式

inner.m4();

}
}

静态内部类:可以看做是静态变量 ,可以访问外部类的静态数据,无法直接访问成员。

public class OuterClass{

//静态变量
private static String s1 = "A";

//成员变量
private String s2 = "B";

//静态方法
private static void m1(){
System.out.println("static's m1 method execute!");
}

//成员方法
private void m2(){
System.out.println("m2 method execute!");
}

//静态内部类
//可以用访问控制权限的修饰符修饰。
//public,protected,private,缺省
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){

//执行m3
OuterClass.InnerClass.m3();

//执行m4
InnerClass inner = new OuterClass.InnerClass();//创建静态内部类的对象
inner.m4();

}

}
局部内部类:
局部内部类相当于局部变量,局部内部类在访问局部变量的时候必须用final修饰;
(jdk1.8中的新特性好像是取消了)。

public class OuterClass{

//方法
public void m1(){

//局部变量
final int i = 10;//为什么用final修饰?

//局部内部类
//局部内部类不能用访问控制权限修饰符修饰。
class InnerClass{

//内部类不能有静态声明
//public static void m1(){}

//成员方法
public void m2(){
System.out.println(i); // 10
}

}

//调用m2
InnerClass inner = new InnerClass();
inner.m2();//怎么样使用m2方法。

}

//入口
public static void main(String[] args){
OuterClass oc = new OuterClass();
oc.m1();
}

匿名内部类:
/*
匿名内部类:指的是类没有名字.
*/
public class Test{

//静态方法
public static void t(CustomerService cs){
cs.logout();
}

//入口
public static void main(String[] args){

//调用t方法
//t(new CustomerServiceImpl());

//使用匿名内部类的方式执行t方法
//整个这个"new CustomerService(){}"就是个匿名内部类
t(new CustomerService(){
public void logout(){
System.out.println("exit!");
}
});

//匿名内部类的优点:少定义一个类.
//缺点:无法重复使用!
}

}

//接口
interface CustomerService{

//退出系统
void logout();

}

//编写一个类实现CustomerService接口
/*
class CustomerServiceImpl implements CustomerService{

public void logout(){
System.out.println("系统已经安全退出!");
}
}
*/
本文出自 “gaogaozi” 博客,请务必保留此出处http://hangtiangazi.blog.51cto.com/8584103/1661202
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: