本文只介绍内部类的使用格式和一些注意事项,至于具体内部类的啥作用的不贴,怕理解的不够。
目录
内部类
定义理解:就是一个类中又包含一个类,那么里面的类就叫内部类,外面的就叫外部类。我是这么理解的,至于为啥要用内部类,有啥作用,抱歉,不清楚<_>
分类
1.成员内部类
2.局部内部类(包含匿名内部类)
成员内部类
1.定义格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
//....
}
//...
}
2.注意事项:内部类使用外部类的成员变量和方法,可以随便用;外部类使用内部类的成员变量和方法,需要创建内部类对象。
3.使用方式:
a.直接调用:在外部类成员位置定义一个方法,在方法内创建内部类对象,调用内部类成员;main方法只是调用外部类方法。
package demo2;
//外部类
public class Person {
//内部类
class Heart{
public void myHeart(){
System.out.println("这是内部类方法");
}
}
public void person(){
//直接调用,创建内部类对象,通过内部类对象调用内部类成员变量和方法
Heart inter=new Heart();
inter.myHeart();
System.out.println("这是外部类方法");
}
}
b.间接调用:外部类名.内部类名 对象名=new 外部类名().new 内部类名();
通过对象名调用内部类成员。
package demo2;
public class Person_test {
public static void main(String[] args) {
//直接调用---在外部类方法中创建内部类对象,调用内部类方法
//在测试类中创建外部类对象,调用外部类方法
Person t=new Person();
t.person();
//间接调用---创建内部类对象,访问内部类方法
Person.Heart h=new Person().new Heart();
h.myHeart();
}
}
局部内部类
1. 定义:如果一个类是定义在一个方法内部的,那么这就是一个局部额内部类
“局部”:只有当前这个方法可以使用它,出了这个方法外面就不可以用了。
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 内部类名称{
//...
}
}
}
2.使用格式:在内部类所在方法里创建内部类对象,调用内部类成员变量和方法。
package demo2;
//局部内部类
//外部类
public class Outer {
//外部类方法
public void methodOuter(){
//局部内部类
class Inner{
int num=10;
public void methodInner(){
System.out.println(num+"局部内部类测试");
}
}
//在外部类方法创建内部类对象,调用内部类成员
Inner i=new Inner();
i.methodInner();
}
}
测试类:直接创建外部类对象,调用外部类方法。
package demo2;
public class Outer_test {
public static void main(String[] args) {
Outer o=new Outer();
o.methodOuter();
}
}
3.注意事项:(重点)
总结一下类的权限修饰符:public > protected > (default) > private
定义一个类的时候,权限修饰符规则:
(1).外部类:public / (default)
(2).成员内部类:public / > protected > (default) > private
(3).局部内部类:什么都不能写
匿名内部类
1.定义:如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。
那么这种情况下就可以省略掉该类的定义,而改为使用匿名内部类。
2.定义格式:
接口名称 对象名 = new 接口名称(){
//覆盖重写接口中所以的抽象方法
};
3.实例:
package demo2;
public class MyInterface_test {
public static void main(String[] args) {
//匿名内部类
MyInterface m=new MyInterface(){
@Override
public void work(){
System.out.println("匿名内部类实现了方法");
}
};
m.work();
}
}
测试类结果:
匿名内部类实现了方法
Process finished with exit code 0
总结
内部类分为成员内部类和局部内部类,局部内部类包含了匿名内部类,三者中匿名内部类最重要,后期使用也最多。