java中的内部类
Posted yikaer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的内部类相关的知识,希望对你有一定的参考价值。
一:静态内部类
1.静态内部类可以等同看做静态变量,内部类的重要作用是可以访问外部类中私有的数据;
2.静态内部类中可以访问外部类中静态的变量和方法,无法访问成员变量和成员方法(静态上下文中无法访问非静态的变量和方法);
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!);
}
//定义静态内部类
static class Innerclass{
//静态方法
public static void m3(){
System.out.println(s1);
m3();
//以下成员变量,成员方法无法访问
//System.out.println(s2);
//m4();
}
//成员方法
public void m4(){
System.out.println(s1);
m3();
//在静态内部类中,以下成员变量,成员方法无法访问
//System.out.println(s2);
//m4();
}
}
public static void main(String args[]){
//因为m3方法是静态方法,所以用"类名."的方法访问
Outerclass.Innerclass.m3();
//方法成员方法必须创建对象
Innerclass inner = new Outerclass.Innerclass();
Inner.m4();
}
}
二:成员内部类
1.成员内部类可以等同看做成员变量;
2.成员内部类中不能有静态声明;
3.成员内部类中的成员方法中可以访问外部类中的所有数据,包括静态变量,静态方法;
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!);
}
//定义成员内部类
class Innerclass{
//成员内部类中不能有静态声明
//public static void m3(){}
//成员内部类中的成员方法可以访问外部类中的所有数据
public void m4(){
System.out.println(s1);
m3();
System.out.println(s2);
m4();
}
}
public static void main(String args[]){
//成员方法必须创建对象,但与静态内部类的访问有所不同
//先创建外部类对象,在通过“外部类对象.”的方式创建内部类对象
Outerclass oc = new Outerclass();
Innerclass inner = oc.Innerclass();
Inner.m4();
}
}
三:局部内部类
1.局部内部类可以等同看做局部变量,不能用访问控制权限修饰符修饰;
2.局部内部类中访问的局部变量必须用final关键字修饰;
3.局部内部类中不能有静态声明;
public class Outerclass{
public void m1(){
//局部变量,必须用final修饰
final int i = 10;
//声明局部内部类
class Innerclass{
//成员方法
public void m2(){
System.out.println(i);
}
}
//要想在m1方法之外调用m2方法,必须在m1方法内部创建对象
Innerclass inner = new Innerclass();
inner.m2();
}
public static void main(String args[]){
Outerclass oc = new Outerclass();
oc.m1();
}
}
四:匿名内部类
1.匿名内部类是指类没有名字;
2.匿名内部类的优点:可以少定义一个类;缺点:代码无法重复使用
public class Test{
public static void t(CustomerService cs){
cs.logout();
}
public static void main(String args[]){
//第一种方法:使用匿名内部类调用t方法,在匿名内部类中重写logout方法,作为参数传到t方法中
Test.t(new CustomerService(){
public void logout(){
System.out.println("程序已安全退出!");
}
});
//第二种方法:因为接口不能创建对象,所以创建接口实现类的对象
Test.t(new CustomerServiceImpl());
}
}
//定义一个接口
interface CustomerService{
void logout();
}
//使用类实现接口
class CustomerServiceImpl implements CustomerService{
public void logout(){
System.out.println("程序已安全退出!");
}
}
以上是关于java中的内部类的主要内容,如果未能解决你的问题,请参考以下文章