什么是内部类
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。
内部类的种类?
- 成员内部类
- 局部内部类
成员内部类 :
定义在类中方法外的类
定义格式:
注意事项:
- 内部类可以直接访问外部类的成员,包括私有成员。
- 外部类要访问内部类的成员,有2种方式:
方式一:外部类方法中,创建内部类对象,间接访问内部类成员
方式二:创建内部类的对象 格式为:
内部类重名访问:
- 在内部类中要访问,本类的局部变量 直接写变量名
- 在内部类中要访问,本类的成员变量格式:this.变量名
- 在内部类中要访问,外部类成员变量格式:外部类名称.this.外部类成员变量名
代码举例:
public class Body { //外部类 class heart { //成员内部类 String name = "王五"; public void methodheart() {//内部类方法 String name = "李四"; System.out.println("我是成员内部类成员方法"); //访问内部类局部变量 System.out.println(name);//李四 //访问内部类成员变量 System.out.println(this.name);// 王五 //访问外部类成员变量 System.out.println(Body.this.name);//张三 } } private String name = "张三"; public void methodBody() { System.out.println("我是外部类成员方法"); // 使用内部类方式一 ,在外部类方法中创建内部类对象,使用内部类成员 new heart().methodheart(); } }
测试代码
public class Demo01InnerClass { public static void main(String[] args) { // 创建外部类对象,调用外部类方法,间接使用内部类成员 Body body = new Body(); body.methodBody(); //============================================================== //方式2 直接调用.创建内部类对象 Body.heart b = new Body().new heart();// // 内部类对象,使用成员 b.methodheart(); } }
局部内部类
一个类定义在一个方法内部,那么这就是一个局部内部类。
“局部”:只有当前所属的方法才能使用,出了方法就不能使用了
定义格式:
修饰符 class 外部类名称{
修饰符 返回值类型 外部类方法名称(参数列表){
class 局部内部类名称{
//...
}
}
}
使用:
在外部类方法里创建,内部类对象。在调用内部类成员
代码举例:
package demo02; public class Outer { public void methodOuter(){ class Inner{ int age = 18; public void InnerMethod(){ System.out.println("我是局部内部类方法"); } } // 创建内部类对象 Inner inner = new Inner(); //输出局部内部类的成员变量 System.out.println(inner.age); //调用局部内部类的方法 inner.InnerMethod(); } }
测试代码
package demo02; public class Test { public static void main(String[] args) { // 创建外部类对象 Outer o = new Outer(); //调用外部类方法,间接访问内部类属性 o.methodOuter(); } }
总结:
- 外部类的权限修饰符 要么不写 要么就是public
- 成员内部类的权限修饰符可以是四种修饰符中的一种
- 局部内部类 不能写修饰符
- 局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是常量,原因是类和方法的生命周期不一样。常量可以copy进入常量池使用。
原文地址:https://www.cnblogs.com/wurengen/p/10743755.html
时间: 2024-10-15 02:13:06