Java内部类详解(三大内部类)
Posted 师兄白泽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java内部类详解(三大内部类)相关的知识,希望对你有一定的参考价值。
Java内部类详解
1. 什么是内部类?
简单来说,内部类就是在一个类中定义的一个或多个类。把这一个类成为外部类。
内部类是一个非常有用的特性,因为他允许你把一些逻辑相关的类组织在一起,并控制位于内部类的可视性,但是要注意内部类和组合是完全不同的概念。
组合: 组合是一种代码复用机制,组合的是对象,通俗的理解是在一个类中创建或引用另一个类的对象。
内部类: 内部类是一种代码隐藏机制,通俗的理解是在一个类的内部定义另一个类。根据定义位置的不同,可以分为:成员内部类、局部内部类、匿名内部类和静态内部类。
内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员);外部类需要创建内部类的对象,才能访问内部类的成员和方法。
与C++不同的是在C++中只是单纯的名字隐藏机制,与外围对象没有联系,也没有隐含的访问权。
2. 内部类的分类:
- 成员内部类
class Outter{
private String name;//定义成员变量
//定义成员方法,方法中访问内部类
public void test(){
Inner inner = new inner();
inner.show();
}
//定义成员内部类
class Inner{
//在成员内部类的方法中访问外部类的成员变量
void show(){
System.out.print("name="+name);
}
}
}
public class Example{
public static void main(String[] args){
Outter outter = new Outter();//创建外部类对象
outter.test();//调用test方法
}
}
注:如果想用外部类去访问内部类,则需要通过外部类的对象去创建内部类的对象,语法如下:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
- 静态内部类
可以使用static关键字修饰一个成员内部类,该内部类称为静态内部类,他可以在不创建外部对象的情况下被实例化。语法如下:
外部类名.内部类名 变量名 = new 外部类名().内部类名();
class Outter{
private static String name;//定义成员变量
//定义静态内部类
static class Inner{
//在成员内部类的方法中访问外部类的成员变量
void show(){
System.out.print("name="+name);
}
}
}
public class Example{
public static void main(String[] args){
Outter.Inner inner = new Outter.Inner();//创建内部类对象
inner.show();//调用show方法
}
}
注:
在静态内部类中只能访问外部类的静态成员,去掉静态会报错
在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态成员。
- 方法内部类
方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。
class Outter{
private static String name;//定义成员变量
//定义成员方法,方法中访问内部类
public void test(){
//方法中的内部类
class Inner{
void show(){
System.out.print("name="+name);//访问外部类的成员变量
}
}
Inner inner = new Inner();
inner.show();
}
}
public class Example{
public static void main(String[] args){
Outter outter = new Outter();//创建外部访问对象
inner.test();//调用test()方法
}
}
以上是关于Java内部类详解(三大内部类)的主要内容,如果未能解决你的问题,请参考以下文章