一、内部类
(一)什么是内部类?
可以在类中再定义类,就叫做内部类,这个内部类所在的类,就叫做外部类。
(二)内部类作用
1.内部类提供更好的封装,把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成外部类的成员。然而外部类不能访问内部类的实现细节(如内部类的成员变量)。
二、成员内部类
1.什么是成员内部类
在一个类中可以定义成员变量、成员方法,还可以定义类就叫做成员内部类。成员内部类可以访问外部类的**所有成员**。
2.外部类访问内部类,首先创建外部类对象去创建内部类对象,创建内部类对象的语法格式
外部类名.内部类名 变量名=new 外部类名().new 内部类名(); Outer. Inner1 oi =new Outer(). new Inner1();
3.怎么定义成员内部类案例
例如:
//外部类Outer
class Outer{
private int a=20;
//内部类Inner1
class Inner1 {
private int b =10;
public void inShow(){
System.out.println("Outer...a="+a);
System.out.println("Inner...b="+b);
}
}
public void testInner(){
Inner in=new Inner();
in.inShow();
}
Outer
是一个外部类,在这个类中定义了Inner1
成员内部类和testInner()
成员方法,在Inner1
内部类中有一个inShow()
方法是成员内部类去访问外部类的成员变量a
,在testInner()
方法中创建内部类Inner1
实例对象,调用InShow()
方法。
如果想调用inShow()方法
,有两种方法:
⑴首先创建外部类对象new Outer()
再去创建内部类对象new Inner()
,创建内部类对象代码如下:
Outer.Inner1 oi =new Outer().new Inner1();;//创建内部类 oi.inShow();//调用test()方法
⑵在外部类中定义一个testInner()
方法,在testInner()
方法中创建内部类Inner1
实例对象,调用InShow()
方法。然后用外部类对象调用testInner()
方法。
Outer out=new Outer();//创建外部类对象 out.testInner1();//调用testInner1()方法
输出的结果是:
Outer...a=20 Inner...b=10
三、静态内部类
1.什么是静态内部类
内部类如果使用static关键字来声明,这个内部类叫做静态内部类。它是可以不创建外部类对象被实例化。
//外部类Outer
class Outer {
private int a = 20;
//静态内部类Inner2
static class Inner2 {
int d = 40;
//成员方法
public void show() {
System.out.println("static Inner...d=" + d);
}
//静态方法
public static void show2() {
// System.out.println(b);//b是外部类的成员变量,所以静态内部类中无法访问
System.out.println("static Inner...static show2");
}
}
}
2.调用静态内部类非静态方法
Outer.Inner2 soi=new Outer.Inner2();
soi.show();
测试结果:
static Inner...d=40
3.调用静态内部类静态方法
Outer.Inner2.show2();
测试结果:
static Inner...static show2
从上面的代码中,内部类Inner2
使用static
关键字来声明,表示一个静态内部类
。在静态内部类中只可以访问外部类的静态变量。如果访问外部类的成员变量必须通过外部类的实例去访问,静态内部不会有外部类的引用!
四、方法内部类
1.什么是方法内部类
内部类定义在外部类的方法中,方法内部类只可以在这个方法的内部可见,也就是只可以在这个方法内使用。
2.方法内部类不可以在外部类方法以外去使用,方法内部类不能使用访问控制符和static修饰符。
3.怎么使用方法内部类
例如:
class Outer {
//定义类的成员变量
private String name = "李华";
private int score = 88;
public void test() {
//在方法中定义内部类
class Inner {
void show() {
//访问外部类的成员变量
System.out.println("姓名:" + name + " " + "英语成绩:" + score + "分!");
}
}
Inner in = new Inner();//创建内部类对象
in.show();//调用内部类方法
}
}
public class Test {
public static void main(String[] args) {
Outer out = new Outer();//创建外部类对象
out.test();//调用test()方法
}
}
输出的结果是:
姓名:李华 英语成绩:88分!
从上面代码中,在Outer类的test()方法中定义了一个内部类Inner,因为内部类Inner是方法内部类,程序在运行只能在方法创建类的实例对象然后调用show()方法,方法内部类是可以访问外部类的成员变量。
五、总结
本文主要介绍了内部类的成员内部类、静态内部类、方法内部类。
成员内部类是在一个类中可以定义成员变量、成员方法外,还可以定义类。通过一个怎么定义成员内部类案例帮助理解这个用法。
静态内部类是使用static关键字来声明,通过一个如何使用静态内部类案例理解这个用法。
方法内部类是内部类定义在外部类的方法中,方法内部类只可以在这个方法的内部可见,也就是只可以在这个方法内使用。
希望大家通过本文的学习,对你有所帮助!